ある範囲の要素をベクトルに挿入する次のプログラムについて考えてみます。
vector<string> v1;
vector<string> v2;
v1.push_back("one");
v1.push_back("two");
v1.push_back("three");
v2.push_back("four");
v2.push_back("five");
v2.push_back("six");
v1.insert(v1.end(), v2.begin(), v2.end());
これにより、範囲が効率的にコピーされ、範囲全体にターゲットベクトルに十分なスペースが割り当てられるため、最大1つのサイズ変更が必要になります。ここで、範囲をベクトルに移動しようとする次のプログラムについて考えてみます。
vector<string> v1;
vector<string> v2;
v1.push_back("one");
v1.push_back("two");
v1.push_back("three");
v2.push_back("four");
v2.push_back("five");
v2.push_back("six");
for_each ( v2.begin(), v2.end(), [&v1]( string & s )
{
v1.emplace_back(std::move(s));
});
これは正常な移動を実行しますが、ターゲットベクトル内のスペースの事前割り当てに関してinsert()が持つ利点を享受しないため、操作中にベクトルのサイズを数回変更できます。
だから私の質問は、範囲をベクトルに移動できる同等の挿入物はありますか?