如何将矢量的某些元素移动到另一个矢量中,同时使原始尺寸更小?我不想制作副本,我想例如:在5个元素的向量中,将第1个元素移动到另一个向量,现在原始元素将有4个元素。
答案 0 :(得分:2)
首先,您要使用push_back将项目添加到第二个向量,然后使用erase从第一个向量中删除项目。这两个都是std :: vector类的成员。
一个例子:
std::vector<int> vec1, vec2;
//populate the first vector with some stuff
vec1.push_back(1);
vec1.push_back(2);
vec1.push_back(3); // so the vecotr is now { 1, 2, 3}
//Then move item 2 to the second vector
vec2.push_back(vec1[2]);
vec1.erase(2);
编辑: 虽然正如其他人所指出的那样,如果这不是您想要的功能,它看起来可能不是您正在寻找的向量。看看STL containers,看看是否有更符合目的的东西。
答案 1 :(得分:2)
std::vector<std::string> v1 = {"hello", "hello", "world", "c++", "hello", "stuff"};
std::vector<std::string> v2;
auto const pos = std::stable_partition(
v1.begin(), v1.end(),
[](std::string const& i) {
// Condition in here. Return false to "remove" it.
return "hello" != i;
});
std::move(pos, v1.end(), std::back_inserter(v2));
// If you don't want to maintain current contents of v2, then
// this will be better than std::move:
// v2.assign(std::make_move_iterator(pos),
// std::make_move_iterator(v1.end()));
v1.erase(pos, v1.end());
如果你愿意,你可以编写自己的帮助函数来封装它。 See it working here
答案 2 :(得分:1)
您可以使用std::move
获取可移动参考。
并非所有类型都允许您移动它们。此外,并不保证您移动的实例处于正确的状态。
移动后,您需要从矢量中删除位置,这将导致所有元素被复制/移动到正确的位置。
答案 3 :(得分:0)
如果您不在乎订购,可以使用:
std::swap(v1[index_of_item],v1.back());
v2.push_back(std::move(v1.back()));
v1.pop_back();