c++ - 如何在增量循环中构造 std::list 迭代器

标签 c++ stl iterator

我正在尝试对 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) {
        ...
    }
}

这行不通,因为列表迭代器不是随机访问的,所以您不能 +1。但是我在寻找一个简洁的替代品时遇到了一些麻烦;编译器似乎对 std::list<int>::iterator j(i)++; 不太满意我对此抱有希望。实现我想要的似乎我将不得不有一些笨拙的额外增量,这不适合 for 循环的结构。

有明显的替代方案(例如,使用 vector !)但在我看来,应该有一些相当巧妙的方法来做到这一点,但我目前还没有看到。

在此先感谢您的帮助:)

最佳答案

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) {
        ...
    }
}

关于c++ - 如何在增量循环中构造 std::list 迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2269546/

相关文章:

java - 转换类型 JNI JAVA

c++ - SmartPtr 和模板

C++ STL算法(列表排序)OpenMP/多线程实现

c++ - 如何按其 .second 参数对 map 进行排序

c++ - Protocol Buffer 与 FlatBuffers

c++ - 为什么这个 vector 迭代器不会失效?

java - ArrayList 迭代器抛出 ConcurrentModificationException

c++ - STL 容器的基于范围的循环中的迭代器语法有什么区别

c++ - 常规迭代器(或类似的范围/ View 类)是否应该从 const_iterator 派生?

c++ - 如何在C#中创建和使用dll文件