如果我继续递增迭代器会发生什么

What will happen if I keep incrementing an iterator?

本文关键字:什么 迭代器 继续 如果      更新时间:2023-10-16

我有一个简单的问题:如果迭代器到达C++STL容器的末尾()(最后一个)时,我一直递增,会发生什么?例如

set<int> intSet;
intSet.insert(0);
intSet.insert(1);
intSet.insert(2);
set<int>::iterator setIter = intSet.begin();
for (int i = 0; i < 10; i++)
  setIter++;

那么,setIter会一直是intSet.end()吗?或者这是一种未定义的行为(可能会给我带来不一致的垃圾)?

它将在VS2013中引发运行时错误。然而,它不会出现在G++(表意)中。然而,如果你使用它,它是未定义的行为。它绝对不等于intSet.end()

仅仅增加它的行为就不会有任何作用,至少在GNU编译器中是这样。

如果您试图取消引用它,则会调用未定义的行为。

有关更多讨论,请参阅此问题。