c++单向链表遍历问题

forward_list是单向链表,不支持范围for循环。
但我这个为什么能通过编译完整运行

img

img

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/274308
  • 这篇博客你也可以参考下:C++中list和forward_list的迭代器不支持加减运算
  • 除此之外, 这篇博客: 容器:forward_list用法及示例中的 简介 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • forward_list是单链表容器
    是 C++ 11 新添加的一类容器,其底层实现和 list 容器一样,采用的也是链表结构,只不过使用的是单链表

  • 您还可以看一下 李宁老师的征服C++ 11视频精讲课程中的 单向链表容器:forward_list(C++ 11)小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    由于forward_list是单向链表,所以不支持范围for循环。然而,编译器可以将范围for循环自动转换为while循环,因此即使编译器不能直接使用范围for循环,代码仍然能够正常编译和运行。

    如果你需要使用for循环遍历forward_list中的元素,可以使用迭代器和while循环。以下是一个简单的示例:

    #include <forward_list>
    #include <iostream>
    
    int main() {
      std::forward_list<int> myList { 1, 2, 3, 4, 5 };
    
      // 使用迭代器和while循环遍历元素
      for (auto itr = myList.begin(); itr != myList.end(); ++itr) {
        std::cout << *itr << " ";
      }
    
      return 0;
    }
    

    输出结果为:1 2 3 4 5

    使用迭代器可以遍历forward_list中的所有元素。要访问元素,可以使用解引用运算符(*)。在这个示例中,我们将迭代器命名为itr,并通过std::forward_list的begin()和end()成员函数进行初始化。每次循环迭代器向前移动,直到itr等于end()。

    总之,即使在使用范围for循环时,forward_list不支持它,因为C++编译器可以将其自动转换为while循环,所以代码仍然能够正常编译和运行。要遍历forward_list的元素,可以使用迭代器和while循环。