ベクトルからchar配列を取得する最も簡単な方法は何ですか?stdから配列を取得する:ベクトル
私がやっていることは、ベクトルの開始と終了のイテレータを使用して文字列を初期化し、この文字列から.c_str()を取得することです。他の効率的な方法はありますか?
ベクトルからchar配列を取得する最も簡単な方法は何ですか?stdから配列を取得する:ベクトル
私がやっていることは、ベクトルの開始と終了のイテレータを使用して文字列を初期化し、この文字列から.c_str()を取得することです。他の効率的な方法はありますか?
これは、あなたが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());
}
編集:コメントから(感謝カサブランカ)
std::vector<char> chars;
char* char_arr = chars.data(); // &chars[0]
'data()'は標準STL仕様の一部ではありません。 – casablanca
新しいC++ 0x STL(MVSCとGCCの両方で実装されています)の一部です。コンパイラがサポートしている場合、&chars [0]で使用する必要があります。 – ronag
+1ですが、後でベクターが変更された場合、ポインタが無効になる可能性があることに注意してください。 – casablanca