关于迭代器无效规则的问题,很明显,标准的精神意味着,例如,"deque中间的擦除使所有迭代器失效,对deque元素的引用"也指的是结束迭代器。
然而,我在任何地方都找不到标准明确表示这一点,严格地说,端迭代器不是容器中元素的迭代器。
2003年的标准是否在某个地方明确了这一点?
例如,23.1/10:
swap()
函数不会使引用被交换容器元素的任何引用、指针或迭代器无效。[注意:end()
迭代器没有引用任何元素,因此可能会失效。--结束注释]
我不知道我们是否可以确定引用元素的迭代器在标准中一直被用来排除结束迭代器:/
正如在评论中所说,我想这是为了允许结束迭代器指向容器中的sentinel值。
例如,典型的双链路List
实现是创建一个Node
结构,并在List
中按值具有一个Node
作为端节点。