如何从头到尾遍历矢量?

时间:2012-10-18 08:47:39

标签: c++ vector

  

可能重复:
  Erasing elements from a vector

我想删除一些元素,所以不要错过迭代

我现在跟踪如下

vector<double> distances;
for(size_t i=0; i<distances.size();i++)
{

}

如何从头到尾遍历所以我可以安全地删除元素并访问我想要的元素?

3 个答案:

答案 0 :(得分:2)

for (size_t i = distances.size() - 1; i >=0; --i)

但是,您应该使用std::remove_if代替

答案 1 :(得分:2)

实现这一目标的最佳方法是作弊。

在C ++中,我们有擦除/删除习惯用法以获得最高效率。你创建一个谓词,然后你就开始了,现在用lambdas变得非常简单。

// This removes all odd elements in vec
vec.erase(vec.remove_if([](int i) { return i % 2 == 1 }), vec.end();

remove_if的工作方式是将元素移动(复制或移动),以便收集您希望保留在容器头部的所有元素,尾部保留未指定(但是有效的状态,然后返回到尾部的第一个元素的迭代器。

然后使用容器的范围擦除方法,让容器一次性删除所有这些元素。

答案 2 :(得分:1)

使用reverse_iterator :

vector<something>::reverse_iterator iter = v.rbegin();
iter++; //Iterates backwards