ホームページ  >  記事  >  バックエンド開発  >  同じベクトルから要素をプッシュする場合、元の参照に依存しても安全ですか?

同じベクトルから要素をプッシュする場合、元の参照に依存しても安全ですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-24 10:33:30983ブラウズ

When Pushing Elements from the Same Vector, Is it Safe to Rely on the Original Reference?

同じベクトルから要素を押し戻す: 注意事項

この説明では、同じベクトルから要素を押し戻すことに関連する潜在的な落とし穴を調査し、調査します。

潜在的な危険

次のコード スニペットを考えてみましょう:

<code class="cpp">vector<int> v;
v.push_back(1);
v.push_back(v[0]);</code>

2 番目の Push_back 操作はベクトルを再割り当てする可能性があります。最初の要素への参照を無効にします。したがって、このアプローチは一般に安全ではないと考えられています。

安全なアプローチ

このような操作の安全性を確保するには、reserve メソッドを使用して事前に十分なスペースを割り当てることができます。

<code class="cpp">vector<int> v;
v.push_back(1);
v.reserve(v.size() + 1);
v.push_back(v[0]);</code>

標準への準拠

上記の動作は、C 標準 (または同様の問題) で対処されています。

1) Parameters taken by const reference can be changed during execution of the function
Examples:
Given std::vector v:
v.insert(v.begin(), v[2]);
v[2] can be changed by moving elements of vector

ただし、内容が変更された場合でも機能を保証するのはベクターの責任であるため、この問題は欠陥とはみなされませんでした。

以上が同じベクトルから要素をプッシュする場合、元の参照に依存しても安全ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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