Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何从头到尾遍历向量?_C++_Vector - Fatal编程技术网

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方法,要求容器一次性删除所有这些元素。

请参见我不确定这是否有效,迭代器在从矢量中删除关联对象时可能无效。我不确定这是否有效,迭代器在从中删除关联对象时可能无效我是向量