2010-11-27 11 views
33

ベクトルからchar配列を取得する最も簡単な方法は何ですか?stdから配列を取得する:ベクトル

私がやっていることは、ベクトルの開始と終了のイテレータを使用して文字列を初期化し、この文字列から.c_str()を取得することです。他の効率的な方法はありますか?

答えて

62

これは、あなたがstd::vectorの最初の要素のアドレスを取得するために&vec[0]を行うことができ、かつ標準は連続したメモリを有することにベクトルを制約するので、あなたが行うことができ、スコット・マイヤーズ効果的なSTLで説明しましたこのようなもの。

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

} 

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

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

編集:コメントから(感謝カサブランカ)

  • はベクトルが変更された場合、ポインタを無効にすることができますように、このデータへのポインタを保持について警戒します。
+20

+1ですが、後でベクターが変更された場合、ポインタが無効になる可能性があることに注意してください。 – casablanca

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

'data()'は標準STL仕様の一部ではありません。 – casablanca

+16

新しいC++ 0x STL(MVSCとGCCの両方で実装されています)の一部です。コンパイラがサポートしている場合、&chars [0]で使用する必要があります。 – ronag

関連する問題