-2

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

2 回答 2

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

这应该可以解决问题。

(当然,要真正从向量中删除它们,你必须写

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

根据擦除删除成语。)

编辑:刚刚注意到:

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

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

于 2013-07-05T19:30:51.723 回答
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());

由于迭代器的通用性,这适用于比向量更大的容器类。

于 2013-07-05T19:33:50.180 回答