私の質問は単純です:std :: vector要素が連続していることが保証されていますか?つまり、std :: vectorの最初の要素へのポインタをC配列として使用できますか?
私の記憶がうまく機能するなら、C ++標準はそのような保証をしませんでした。ただし、std :: vectorの要件は、要素が隣接していない場合、要件を満たすことが実質的に不可能であるようなものでした。
誰かがこれを明確にできますか?
例:
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'
}
}
values
、具体的にはそのサイズを変更する(たとえば、push_back()
)呼び出しは、にコピーされたポインターを無効にする基になるベクトルの再割り当てを要求する場合がありますarray
。これは、ベクターへのポインターの代わりにvector :: iteratorを使用する場合と同じ原理です。:)
values
そのif
ブロック内で変異すると、問題が発生することを知っています。質問の答えはわかりませんので、コメントを残しておきます。:)