我想删除一些元素,所以不要错过迭代
我现在跟踪如下
vector<double> distances;
for(size_t i=0; i<distances.size();i++)
{
}
如何从头到尾遍历所以我可以安全地删除元素并访问我想要的元素?
答案 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