如何使用increment在循环中构造一个std :: list迭代器

Pet*_*ter 7 c++ iterator stl

我正在尝试在std :: list上进行双循环以对每对元素进行操作.但是,我在初始化第二个迭代器时遇到了一些麻烦.我想写的代码是:

for(std::list<int>::iterator i = l.begin(); i != l.end(); ++i) {
    for(std::list<int>::iterator j = i+1; j != l.end(); ++j) {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

这不起作用,因为列表迭代器不是随机访问,所以你不能做+1.但是我在寻找一个简洁的选择方面遇到了一些麻烦; 编译器对std::list<int>::iterator j(i)++;我有一些希望似乎并不高兴.实现我想要的东西似乎我将不得不有一些尴尬的额外增量,这将不太适合for循环的结构.

有明显的替代方案(例如使用矢量!)但在我看来应该有一些合理利落的方式来做这个,我现在还没有看到.

在此先感谢任何帮助:)

dir*_*tly 9

for(std::list<int>::iterator i = l.begin(); i != l.end(); ++i) {
    std::list<int>::iterator j = i;
    for(std::advance(j, 1); j != l.end(); ++j) {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)


Sea*_*ean 8

怎么样:

for (std::list<int>::iterator i = l.begin(); i != l.end(); ++i) {
    for (std::list<int>::iterator j = i; ++j != l.end(); ) {
        // ...
    }
}
Run Code Online (Sandbox Code Playgroud)