0

と の動作の違いに気付きましvector::push_backinsert

私がする時

iter = myVector.begin() + 5;
myVector.push_back(std::move(*iter));

ベクトルの 6 番目の要素が一番下に追加され、前の位置から削除されます。

一方、私がこれを行うと:

iterBegin = myVector.begin();
myVector.insert(iterBegin,std::move(*(iterBegin + 5)));

6 番目の要素は最初の位置に挿入されますが、前の位置から削除されません。

のようにstd::move動作しないのはなぜですか?insert()push_back()

4

2 に答える 2

1

イテレータは、コレクション クラスが変更されていない場合にのみ有効ですvector。初めて挿入すると、イテレータが無効になり、結果は未定義になります。

どちらの場合もiter無効になり、悪いことが起こります。さらに悪いことに、リリース ビルド、その 1 台の古いマシン、満月時などを除いて動作するようです。

代わりに、追加する要素を新しいコンテナにコピーしてから追加することを検討してください。

于 2013-07-26T05:30:47.307 に答える