可能重复:
从向量中删除元素
我想删除一些元素,所以不想错过迭代
我现在遍历如下
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++ 中,我们使用擦除/删除习语来获得最高效率。你创建了一个谓词,然后你就开始了,现在使用 lambdas 变得非常简单。
// 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