同じベクトルからの要素のプッシュ
push_back などの特定のベクトル演算では、内部容量の再割り当てが必要になる場合があります。これにより、ベクター内の以前の要素への参照の有効性について懸念が生じる可能性があります。
そのような懸念の 1 つは、同じベクターから要素をそれ自体にプッシュするときに発生します。
<code class="cpp">vector<int> v; v.push_back(1); v.push_back(v[0]);</code>
2 回目の Push_back の後演算を実行すると、ベクトルのメモリ割り当てが変更され、最初の整数 (つまり、v[0]) への参照が無効になっている可能性があります。
代わりに、次のコードを検討してください:
<code class="cpp">vector<int> v; v.push_back(1); v.reserve(v.size() + 1); v.push_back(v[0]);</code>
2 回目の Push_back の前にreserveを呼び出すことで、再割り当てを行わずに新しい要素を収容するのに十分な容量がベクトルに確保されます。これにより、最初の整数への参照が操作後も有効なままであることが保証されます。
LWG 欠陥レポート 526 に対する提案された解決策に基づいて、vector::push_back が必要であるため、最初のコード例が有効であることがわかります。このようなシナリオで動作します。ただし、以前の要素への参照の有効性を維持するには、再割り当ての可能性を避けるために予約または代替メソッドを使用することが賢明です。
以上がReserve は要素挿入中のベクトル参照の有効性を保証しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。