2010-11-27 13 views
33

Quel est le moyen le plus simple d'obtenir un tableau char à partir d'un vecteur?Obtention d'un tableau à partir de std: vector

La façon dont je fais est d'obtenir une chaîne initialisée en utilisant des itérateurs de début et de fin vectoriels, et d'obtenir ensuite .c_str() à partir de cette chaîne. Existe-t-il d'autres méthodes efficaces?

Répondre

62

Cela a été discuté dans Scott Meyers STL efficace, que vous pouvez faire &vec[0] pour obtenir l'adresse du premier élément d'un std::vector, et que la norme limite des vecteurs d'avoir la mémoire contiguë, vous pouvez le faire des trucs comme ça.

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

} 

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

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

modifier: D'après les commentaires (merci casablanca)

  • se méfier de la tenue des pointeurs vers ces données, que le pointeur peut être invalidée si le vecteur est modifié.
+20

+1 mais attention, le pointeur peut devenir invalide si le vecteur est modifié ultérieurement. – casablanca

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

'data()' ne fait pas partie de la spécification STL standard. – casablanca

+16

Il fait partie du nouveau C++ 0x STL (implémenté à la fois dans MVSC et GCC), et devrait être utilisé sur & chars [0] si votre compilateur le supporte. – ronag