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

时间:2014-04-24 01:42:46

标签: c++ iterator set increment

我有一个简单的问题:如果我在迭代器到达C ++ STL容器的end()(最后一个)时继续递增,会发生什么? e.g。

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()吗?或者这是一个未定义的行为(可以给我不一致的垃圾)?

2 个答案:

答案 0 :(得分:1)

它将在VS2013中抛出运行时错误。但是,它不会在G ++(ideone)中。但是,如果您使用它,它是未定义的行为。它绝对不等于intSet.end()

答案 1 :(得分:0)

仅仅增加它的行为将 nothing ,至少在GNU编译器中是这样。

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

有关详细讨论,请参阅this question