关于this question on iterator invalidation rules,很明显标准的精神意味着,例如“deque中间的擦除使所有迭代器无效并且对deque元素的引用”也指的是结束迭代器。
但是,我找不到标准使其明确的任何地方,严格来说,结束迭代器不是容器中元素的迭代器。
2003年的标准是否在某处明确了这一点?
答案 0 :(得分:8)
例如,23.1 / 10:
no
swap()
函数使任何引用,指针或迭代器无效,引用要交换的容器的元素。 [注意:end()
迭代器不引用任何元素,因此它可能无效。 - 后注]
我不知道我们是否可以确定在标准中一直使用引用元素的迭代器来排除结束迭代器:/
如评论中所述,我认为这是允许结束迭代器指向容器内的sentinel值。
例如,典型的双重链接List
实现是创建Node
结构,并在Node
中按值List
作为结束节点