いくつかの要素を最初のベクトルから 2 番目のベクトルに移動するにはどうすればよいですか?要素は最初のベクトルから削除されますか?
を使用してstd::move
いる場合、要素は最初のベクトルから削除されません。
これは私が書いたコードです:
move(xSpaces1.begin() + 7, xSpaces1.end(), back_inserter(xSpaces2));
std::move
コンテナではなく、要素をstd::copy
操作します。コンテナを個別に変更する必要があります。たとえば、の最初の17要素を新しいベクトルに移動するには:v1
v2
std::vector<Foo> v1, v2;
// populate v1 with at least 17 elements...
auto it = std::next(v1.begin(), 17);
std::move(v1.begin(), it, std::back_inserter(v2)); // ##
v1.erase(v1.begin(), it);
行の後##
、の最初の17個の要素v1
はまだそこにありますが、それらは「移動元」になっているため、不確定な状態になっています。
を使用std::move
すると、オブジェクトをコピーするのではなく移動できるため、実行速度が向上する可能性があります。値の範囲を移動すると、節約がさらに大きくなる可能性があります。ただし、コンテナから範囲を移動すると、コンテナはこれらの値によって占められていた場所を保持したままになります。
これらのプレースホルダーを削除したい場合は、コンテナーのサイズを手動で変更して削除する必要があります (これらのコンテナー スポットを他の要素に再利用する場合は、その必要はありません)。vector::erase
これを行う 1 つの方法は、コンテナーから移動したのと同じ範囲を呼び出すことです。
あなたが考えているように、あるベクトルから別のベクトルに要素を移動することはできません。最初のベクトルから要素の位置を常に消去する必要があります。
すべての要素を最初のベクトルから 2 番目のベクトルに、またはその逆に変更する場合は、 swapを使用できます。
2 つのベクトル間で同じ量の要素を移動する場合は、 swap_rangesを使用できます。