我的代码是
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
答案 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)。