std::vector 要素を連続した配列として扱うことはできますか?
std::vector 内の要素が保証されているかどうかという疑問が生じます連続したメモリ アドレスを占有するため、最初の要素へのポインタをC-array.
歴史的コンテキスト:
C 98 標準では、この保証はありませんでした。それにもかかわらず、標準の std::vector の要件により、要素が不連続である可能性は低くなりました。
現在の標準:
ただし、この問題は、 C 0x (後に C 11 に名前変更) 標準。 C 98 標準を修正した TR によれば、「ベクトルの要素は連続して格納される」となります。これは、bool 型以外のベクトルの場合、次のことが当てはまります:
&v[n] == &v[0] + n
ここで:
例:
その結果、次のコードが有効になり、期待どおりに機能します:
std::vector<int> values; // ... fill up values if( !values.empty() ) { int *array = &values[0]; for( int i = 0; i < values.size(); ++i ) { int v = array[i]; // do something with 'v' } }
以上がstd::vector 要素はメモリ内で連続していることが保証されていますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。