考虑在矢量中插入一系列元素的以下程序:
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());
这样可以有效地复制范围, 在整个范围内在目标矢量中分配足够的空间, 从而需要最大一次调整。 现在考虑以下程序, 试图将一个范围移动到矢量 :
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));
});
这执行一个成功的移动, 但并享受不到插入( ) 在目标矢量中预分配空间方面的好处, 使矢量在操作期间可以调整几次大小 。
所以,我的问题是,有没有一个插入等同的插件, 可以将一个范围移动到矢量中?