C++ 如何从头到尾遍历向量?
可能重复:C++ 如何从头到尾遍历向量?,c++,vector,C++,Vector,可能重复: 我想删除一些元素,这样就不会错过迭代 我现在要做的事情如下 vector<double> distances; for(size_t i=0; i<distances.size();i++) { } 矢量距离; 对于(大小i=0;i使用反向迭代器: vector<something>::reverse_iterator iter = v.rbegin(); iter++; //Iterates backwards 向量::反向迭代器iter=v.
我想删除一些元素,这样就不会错过迭代 我现在要做的事情如下
vector<double> distances;
for(size_t i=0; i<distances.size();i++)
{
}
矢量距离;
对于(大小i=0;i使用反向迭代器:
vector<something>::reverse_iterator iter = v.rbegin();
iter++; //Iterates backwards
向量::反向迭代器iter=v.rbegin();
iter++;//向后迭代
使用反向迭代器:
vector<something>::reverse_iterator iter = v.rbegin();
iter++; //Iterates backwards
向量::反向迭代器iter=v.rbegin();
iter++;//向后迭代
但是,如果使用std::remove\u,则应改为使用
但是,你应该使用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\u if
的工作方式是,它将元素混洗(复制或移动),以便收集所有希望保留在容器头部的元素,尾部处于未指定(但有效)状态,然后返回尾部第一个元素的迭代器
然后使用容器的范围擦除方法,您要求容器一次性删除所有这些元素。处理此问题的最佳方法实际上是作弊
在C++中,我们有擦除/删除习惯用法,效率最高。创建谓词,然后继续,现在用lambdas变得非常简单。
// This removes all odd elements in vec
vec.erase(vec.remove_if([](int i) { return i % 2 == 1 }), vec.end();
remove\u if
的工作方式是,它将元素混洗(复制或移动),以便收集所有希望保留在容器头部的元素,尾部处于未指定(但有效)状态,然后返回尾部第一个元素的迭代器
然后使用容器的range erase方法,要求容器一次性删除所有这些元素。请参见我不确定这是否有效,迭代器在从矢量中删除关联对象时可能无效。我不确定这是否有效,迭代器在从中删除关联对象时可能无效我是向量