同じベクターから要素をプッシュバックするのは安全ですか? 質問する

同じベクターから要素をプッシュバックするのは安全ですか? 質問する
vector<int> v;
v.push_back(1);
v.push_back(v[0]);

2 回目の push_back によって再割り当てが発生すると、ベクター内の最初の整数への参照は有効ではなくなります。これは安全ではないのでしょうか?

vector<int> v;
v.push_back(1);
v.reserve(v.size() + 1);
v.push_back(v[0]);

これで安全になりますか?

ベストアンサー1

それは次のようになりますhttp://www.open-std.org/jtc1/sc22/wg21/docs/lwg-closed.html#526この問題 (またはそれに非常に類似した問題) を標準の潜在的な欠陥として対処しました。

1) const参照によって取得されるパラメータは関数の実行中に変更される可能性がある

例:

std::vector v が与えられた場合:

v.insert(v.begin(), v[2]);

v[2]はベクトルの要素を移動することで変化できる

提案された解決策は、これは欠陥ではないというものでした。

標準では動作しないことが許可されていないため、vector::insert(iter, value) が動作する必要があります。

おすすめ記事