如果我继续递增迭代器会发生什么
What will happen if I keep incrementing an iterator?
我有一个简单的问题:如果迭代器到达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编译器中是这样。
如果您试图取消引用它,则会调用未定义的行为。
有关更多讨论,请参阅此问题。
相关文章:
- 提供运算符+或运算符到双向迭代器有什么缺点吗?
- 连续迭代器有什么实际用途吗?
- 当通知迭代器参数初始化为空列表的开头时,list::insert 行为是什么?
- 创建可以遍历 std::map 值的通用模板迭代器的最简单方法是什么?
- 迭代器在容器中实际指向什么?
- 什么是迭代器
- ActorItr 迭代器变量中有什么,* ActorItr 返回什么?
- 在 C++17 中实现迭代器和const_iterator的正确方法是什么?
- 迭代器和标量对象之间的未定义行为有什么区别吗?
- 对于代理容器上的迭代器来说,"least bad implementation"可能是什么?
- 随机访问迭代器:我错过了什么?
- 使用 find() 通过 std::set 的迭代器将不起作用。出了什么问题?
- 无法取消引用超出范围的向量迭代器 - 有什么问题?
- map<int,int>的*迭代器是什么?它不是pair<int,int>
- 在下面的 C++ 代码中,*(迭代器)和 *(++迭代器)是什么意思?
- BOOST矩阵的迭代器1和迭代器2是什么,以及如何使用
- 使用什么作为 end() 迭代器C++?
- const_iterator<T>和迭代器<常量T>有什么区别?
- 什么时候足以将const_iterator声明为const迭代器
- 初始化迭代器的最佳方法是什么?