web-dev-qa-db-ja.com

std:vectorから配列を取得する

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

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

38
SkypeMeSM

これは、Scott MeyersのEffective STLで説明されています。&vec[0]を実行すると、std::vectorの最初の要素のアドレスを取得できます。標準では、ベクトルが連続したメモリでは、このようなことを行うことができます。

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

}

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

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

編集:コメントから(casablancaに感謝)

  • ベクトルが変更されるとポインターが無効になる可能性があるため、このデータへのポインターを保持することに注意してください。
73
econoclast
std::vector<char> chars;
char* char_arr = chars.data(); // &chars[0]
45
ronag