结束迭代器失效规则

Lig*_*ica 25 c++ iterator

关于迭代器失效规则的这个问题,很明显标准的精神意味着,例如"deque中间的擦除使所有迭代器无效并且对deque元素的引用"也指最终迭代器.

但是,我无法找到标准使其明确的任何地方,严格来说,结束迭代器不是容器中元素的迭代器.

2003年的标准是否明确了这一点?

Mat*_* M. 8

例如,23.1/10:

no swap()函数使任何引用,指针或迭代器无效,引用被交换的容器的元素.[注意:end()迭代器不引用任何元素,因此可能无效. - 尾注]

我不知道我们是否可以确定引用一个元素的迭代器已在标准中一致地使用以排除结束迭代器:/

正如在评论中所说,我想这是允许结束迭代器指向容器内的sentinel值.

例如,典型的双向链接List实现是创建一个Node结构,并在其中具有一个NodeList作为结束节点.

  • 通过此答案和相关注释,我很满意C ++ 03在此问题上的模棱两可。当然,在实践中,我们知道应该像处理容器元素的迭代器一样对待尾端迭代器。但是,此答案是此问题的答案。 (2认同)