Are std::vector Elements Delivered to Be Contiguous?
C 98 標準では、std 内の連続要素が明示的に保証されていませんでした。 :vector、std::vector の要件により、要素がそうでない可能性は非常に低くなります。連続した。ただし、これは後に C 0x 標準の n2798 ドラフトの要件として明確になりました。
次期 C 0x 標準には次の要件が含まれています。
A vector is a sequence container that supports random access iterators. In addition, it supports (amortized) constant time insert and erase operations at the end; insert and erase in the middle take linear time. Storage management is handled automatically, though hints can be given to improve efficiency. The elements of a vector are stored contiguously, meaning that if v is a vector where T is some type other than bool, then it obeys the identity &v[n] == &v[0] + n for all 0 <= n < v.size().
これは、安全に実行できることを意味します。次の例のように、std::vector の最初の要素へのポインターを C 配列として使用します。
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' } }
以上がC では、`std::vector` の要素ストレージは連続していることが保証されていますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。