2010-11-27 25 views
33

¿Cuál es la forma más fácil de obtener una matriz de caracteres de un vector?Obtener matriz desde std: vector

La manera en que lo hago es obtener una cadena inicializada usando vectores de inicio y fin, y luego obtener .c_str() de esta cadena. ¿Hay otros métodos eficientes?

Respuesta

62

Esto fue discutido en STL eficaz Scott Meyers', que se puede hacer &vec[0] para obtener la dirección del primer elemento de un std::vector, y puesto que la norma restringe vectores de tener memoria contigua, puede hacerlo Cosas como esta.

// some function 
void doSomething(char *cptr, int n) 
{ 

} 

// in your code 
std::vector<char> chars; 

if (!chars.empty()) 
{ 
    doSomething(&chars[0], chars.size()); 
} 

edición: De los comentarios (gracias Casablanca)

  • ser cautelosos acerca de la celebración de punteros a estos datos, ya que el puntero puede ser invalidado si se modifica el vector.
+20

+1 pero tenga en cuenta que el puntero puede dejar de ser válido si el vector se modifica posteriormente. – casablanca

38
std::vector<char> chars; 
char* char_arr = chars.data(); // &chars[0] 
+1

'data()' no es parte de la especificación STL estándar. – casablanca

+16

Es parte del nuevo C++ 0x STL (implementado tanto en MVSC como en GCC), y debe usarse en & chars [0] si su compilador lo admite. – ronag