我有一些矢量temp = {1,2,2,3,4}。如何找到所有elem = 2,保存另一个向量中的位置并从第一个向量中删除。
vector<int> another
vector<int>::iterator it;
for (it = temp.begin(); it != temp.end(); )
{
if (it == elem) { //?
another.push_back(it); //?
temp.erase(it++);
}
else
{
++it;
}
}
答案 0 :(得分:3)
std::remove(vec.begin(), vec.end(), 2);
这应该可以解决问题。
(当然,要实际从矢量中删除它们,你必须写
vec.erase(std::remove(vec.begin(), vec.end(), 2), vec.end());
编辑:刚注意到:
将位置保存在另一个向量中
(“在那里手中有枪”,对吗?) - 基本上这没有多大意义,当你从容器中删除元素时,位置将失效...
答案 1 :(得分:1)
保存位置:
#include <iterator>
for (auto it = temp.begin(); it != temp.end(); ++it)
if (*it == 2)
another.push_back(std::distance(temp.begin(), it));
要删除:
#include <algorithm>
temp.erase(std::remove(temp.begin(), temp.end(), 2), temp.end());
由于迭代器的通用性,这适用于更大类的容器,而不仅仅是向量。