可能重复:
从载体擦除元件
我想,我去删除一些元素,因此不想错过迭代
我现在特拉弗斯如下
vector<double> distances;
for(size_t i=0; i<distances.size();i++)
{
}
如何从年底开始遍历这样我就可以安全地删除元素,但访问我想要的元素?
可能重复:
从载体擦除元件
我想,我去删除一些元素,因此不想错过迭代
我现在特拉弗斯如下
vector<double> distances;
for(size_t i=0; i<distances.size();i++)
{
}
如何从年底开始遍历这样我就可以安全地删除元素,但访问我想要的元素?
for (size_t i = distances.size() - 1; i >=0; --i)
然而,你应该使用std::remove_if
代替
处理这种情况最好的办法就是欺骗,其实。
在C ++中,我们有擦除/删除成语有最效率。 您创建一个谓语,那么你就和它现在变得与lambda表达式很简单。
// This removes all odd elements in vec
vec.erase(vec.remove_if([](int i) { return i % 2 == 1 }), vec.end();
该方法remove_if
工作原理是,它洗牌周围的元素(或复制或移动),以收集所有你希望保留在容器的头部元素,尾部被留在未指定的(但有效)的状态,然后返回给你一个迭代器尾部的第一要素。
届时使用容器的范围内擦除方法,你问容器去除一气呵成所有这些因素。
使用reverse_iterator :
vector<something>::reverse_iterator iter = v.rbegin();
iter++; //Iterates backwards