找到vector中的所有元素并删除它们

时间:2013-07-05 19:29:23

标签: c++ stdvector

我有一些矢量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;
   }
}

2 个答案:

答案 0 :(得分:3)

std::remove(vec.begin(), vec.end(), 2);

这应该可以解决问题。

(当然,要实际从矢量中删除它们,你必须写

vec.erase(std::remove(vec.begin(), vec.end(), 2), vec.end());

根据erase-remove idiom。)

编辑:刚注意到:

  

将位置保存在另一个向量中

(“在那里手中有枪”,对吗?) - 基本上这没有多大意义,当你从容器中删除元素时,位置将失效...

答案 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());

由于迭代器的通用性,这适用于更大类的容器,而不仅仅是向量。