C では、標準テンプレート ライブラリ (STL) が、ベクトル クラスを含む強力なデータ構造を提供します。ベクトルのサイズ変更は一般的な操作ですが、メモリの連続性を仮定することの安全性について懸念が生じます。
提起される質問は次のとおりです。「STL ベクトルのサイズが変更されている場合、要素 0 のアドレス指定により連続したメモリへのアクセスが提供されると仮定できますか?」残りのベクトル要素を含むメモリの場所は?"
C 03 標準 (23.2.4.1) によれば、答えは次のとおりです。 はい。標準では、ベクトル要素は連続して格納され、すべての 0 ≤ n
ただし、この仮定はベクトルが再割り当てされるまでのみ当てはまるという点に注意することが重要です。ベクトルに要素を追加すると、再割り当てがトリガーされ、元のメモリ ブロックから派生したポインターやイテレータが無効になる可能性があります。
したがって、サイズ変更の直後に連続性があると仮定するのは安全ですが、要素が次の場合は安全ではなくなります。その後追加または削除され、ベクターの再割り当てが発生する可能性があります。
以上がサイズ変更後に STL ベクトルの連続性を仮定しても安全ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。