STL映射迭代器可以通过递增超出范围吗?

Mik*_*wis 7 c++ stl

对于关联容器,++运算符可以将迭代器发送到集合的末尾吗?

例:

map<UINT32, UINT32> new_map;
new_map[0] = 0;
new_map[1] = 1;

map<UINT32, UINT32> new_iter = new_map.begin();

++new_iter;
++new_iter;
++new_iter;
++new_iter;
++new_iter;
++new_iter;
++new_iter;
Run Code Online (Sandbox Code Playgroud)

在这结束时,new_iter == new_map.end(),或者它最终是在伟大的未知?

注意:我知道这搞砸了而不是做事的方式.我正在研究一些WTF公司代码.

Tyl*_*nry 27

如果递增结束迭代器,则结果是未定义的行为.因此,它可以保持结束,或者结束,或者通过电子邮件发送给祖母一个指向goatse的链接.

另请参阅:如果我将迭代器指向向量的最后一个元素时将迭代器增加2,该怎么办?

  • 你忘记了令人讨厌的鼻腔恶魔.`:)` (6认同)

小智 11

前向迭代器的++运算符的前提条件是迭代器是可解除引用的.这意味着它不能超过地图的末尾,因此您的代码会给出未定义的行为.这在C++标准的第24.1.3节中描述.


Ala*_*lan 5

正如其他人所指出的那样,增加结束迭代器会导致未定义的行为,但值得注意的是Visual Studio 2008将在运行时抛出调试断言(由于其检查的迭代器),如果这样做.