c++ - 使用 std::list 作为循环列表是否安全?

标签 c++ list iterator std

所以标准中定义了递增或递减 end() 迭代器?在 Linux 上,begin() 被实现为 end()++。

#include <list>
#include <iostream>

int main()
{
  std::list<int> numbers;
  for (int i = 0; i < 10; i++)
    numbers.push_back(i);

  auto it = numbers.begin();
  int count = 3;
  while (count)
  {
    std::cout << *it++;
    if (it == numbers.end())
    {
      ++it; // is this ok ???
      --count;
      std::cout << '\n';
    }
  }
}

所以每个平台上的输出总是一样的?

输出:

0123456789
0123456789
0123456789

最佳答案

递增从 end() 返回的迭代器任何标准 C++ 库容器都会导致未定义的行为。由于 std::list<T> 的大多数实现通用的实现细节它可能会增加 list.end()但不能保证它确实如此。

关于c++ - 使用 std::list 作为循环列表是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12992007/

相关文章:

c++ - 如何创建模板类型迭代器的 STL 对象?

java - 在 Java 中转换迭代器类型

c++ - 由于更改cpp目录导致的链接问题

c++ - 在 Qt 中测试一个操作花费多少时间的最简单方法

html - 如何调整有序列表中的元素而不影响子列表?

python - 从我的类(class)打印列表(python)

javascript - 如何使用 Javascript/Jquery 单击标题属性等于特定变量的列表项?

c++ - 如何将迭代器获取到 vector 的特定位置

c++ - 在 C++ 程序中使用 to_string 时出现编译错误

c++ - 编译器错误 : Expected Nested Name Specifier before typedef