c++ - 从头到尾迭代 C++ vector

标签 c++ vector iterator

是否可以从头到尾迭代一个 vector ?

for (vector<my_class>::iterator i = my_vector.end();
        i != my_vector.begin(); /* ?! */ ) {
}

或者只有这样的事情才有可能:

for (int i = my_vector.size() - 1; i >= 0; --i) {
}

最佳答案

一种方法是:

for (vector<my_class>::reverse_iterator i = my_vector.rbegin(); 
        i != my_vector.rend(); ++i ) { 
} 

rbegin()/rend() 是专门为此目的而设计的。 (是的,增加一个 reverse_interator 会将其向后移动。)

现在,理论上,您的方法(使用 begin()/end()--i)会起作用,std::vector 的迭代器是双向的,但请记住,end() 不是最后一个元素——它是最后一个元素之外的元素,所以你必须先递减,当你到达 begin() 时你就完成了——但你仍然需要进行处理。

vector<my_class>::iterator i = my_vector.end();
while (i != my_vector.begin())
{
     --i;
    /*do stuff */

} 

更新:在将 for() 循环重写为 while() 循环时,我显然过于激进了。 (重要的是 --i 在开头。)

关于c++ - 从头到尾迭代 C++ vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3610933/

相关文章:

java - 与仅使用数组相比,使用 Vector 实现堆栈有优势吗?

c++ - 如何将指针的值永久分配给变量

C++ 读入一行字符串作为整数?

java - 迭代器并发修改异常

c++ - 在 C++ 中按值从映射中删除键、值

c++ - 在带有 brew 的 MacOS 上的链接时缺少 boost ICU 正则表达式符号

c++ - 如何在 C++ 中逐个字符地从文件中读取?

c++ - C++强制堆栈内部函数展开

c++ - "Unresolved overloaded function type"尝试将 for_each 与 C++ 中的迭代器和函数一起使用时

c++ - 将派生对象地址分配给基指针和调用析构函数的机制