如何使用迭代器浏览列表? (C ++)

时间:2014-03-29 07:14:14

标签: c++ iterator listiterator

我的代码是

list<int> foo;
    for (int i = 0; i < 20; i++) {
        foo.push_back(i);
    }
    for (std::list<int>::iterator it = foo.begin(); it != foo.end(); it++)
        std::cout << *it << ' ';

我希望我的迭代器增加3

,输出结果为:

0 3 6 9 12 15 18

而不是:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

2 个答案:

答案 0 :(得分:3)

在列表中,您无法立即通过n推进迭代器(例如it+3),因为它不是随机访问迭代器。但是,您可以将迭代器增加3次:++(++(++it)))

正如评论中指出的那样,您可以使用std::advance(it,3)但是对于列表迭代器,它将归结为重复调用++it 3次。

答案 1 :(得分:1)

列表只有一个双向迭代器(你只能通过++或 - 递增或递减迭代器)。要将迭代器推进三个你可以std :: advance(it,3),但这可能会通过结束并导致无限循环/未定义的行为。

因此:

#include <iostream>
#include <list>

int main()
{
    std::list<int> foo;
    for (int i = 0; i < 20; i++) {
        foo.push_back(i);
    }
    std::list<int>::iterator it = foo.begin();
    while(it != foo.end()) {
        std::cout << *it << ' ';
        // Advance by three, stop at end
        for(int i = 0; i < 3 && it != foo.end(); ++i, ++it);
    }
    return 0;
}

注意:您可以选择支持随机访问的不同容器(std :: array,std :: vector,std :: deque)。