1. ホーム
  2. c++

[解決済み] 同じベクトルから要素をpush_backするのは安全ですか?

2022-06-30 03:34:34

質問

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

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

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

これで安全?

どのように解決するのですか?

以下のように表示されます。 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)が動作するよう要求されます。 は動作しないことを許可していないからです。