この説明では、同じベクトルから要素を押し戻すことに関連する潜在的な落とし穴を調査し、調査します。
潜在的な危険
次のコード スニペットを考えてみましょう:
<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 サイトの他の関連記事を参照してください。