std::Vector 要素のメモリ連続性
懸念のある開発者は、std::vector 内の要素がメモリの連続性を保証されているかどうかという問題をよく提起します。連続していること。このプロパティは、最初の要素へのポインターを C スタイルの配列として扱うことが許可されるかどうかを決定します。
標準規定
当初、C 98 標準では指定が無視されていました。この面。ただし、その後の技術レポート (TR) でこの見落としが修正され、次期 C 0x 標準には明示的な要件として組み込まれる予定です。
TR 仕様
N2798、ドラフトC 0x の仮定:
「ベクトルは、ランダム アクセス反復子をサポートするシーケンス コンテナーです...要素つまり、v がベクトルで、T が bool 以外の型の場合、すべての 0
例
この仕様に基づいて、次のコードを検討してくださいスニペット:
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 標準では、ベクトルの要素への直接メモリ アクセスを許可することで、このコードが意図したとおりに機能することが保証されています。
以上がC では std::vector 要素メモリは連続していますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。