如何从遍历结束矢量开始? [重复](How to traverse vector from en

2019-10-17 08:13发布

可能重复:
从载体擦除元件

我想,我去删除一些元素,因此不想错过迭代

我现在特拉弗斯如下

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

}

如何从年底开始遍历这样我就可以安全地删除元素,但访问我想要的元素?

Answer 1:

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

然而,你应该使用std::remove_if代替



Answer 2:

处理这种情况最好的办法就是欺骗,其实。

在C ++中,我们有擦除/删除成语有最效率。 您创建一个谓语,那么你就和它现在变得与lambda表达式很简单。

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

该方法remove_if工作原理是,它洗牌周围的元素(或复制或移动),以收集所有你希望保留在容器的头部元素,尾部被留在未指定的(但有效)的状态,然后返回给你一个迭代器尾部的第一要素。

届时使用容器的范围内擦除方法,你问容器去除一气呵成所有这些因素。



Answer 3:

使用reverse_iterator :

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


文章来源: How to traverse vector from end to start? [duplicate]
标签: c++ vector