ホームページ  >  記事  >  バックエンド開発  >  Reserve は要素挿入中のベクトル参照の有効性を保証しますか?

Reserve は要素挿入中のベクトル参照の有効性を保証しますか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-24 10:02:30753ブラウズ

Does Reserve Ensure the Validity of Vector References During Element Insertion?

同じベクトルからの要素のプッシュ

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。