考虑下面的程序,其插入一个范围的元素到载体的:
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));
});
这将执行一个成功的举动,但不享受插入()有关于目标向量预分配空间的好处,所以矢量可以在操作过程中被调整几次。
所以我的问题是,是否有插入相当于可移动范围为载体?