关于 C++迭代器失效规则的最流行的帖子声称,不清楚过去的迭代器(即,由end()
、cend()
、rend()
和返回的那些crend()
)是否根据与普通迭代器相同的规则失效,后者指向容器。这些针对 2003 年和 2011 年 C++ 的声明遵循讨论End iterator invalidation rules的帖子,其中接受的答案表明 2003 年标准在此问题上模棱两可。这个结论基于 23.1/10 中的评论(在 的上下文中swap()
),这似乎暗示当规范没有明确提到过去迭代器的失效时,它们可能会失效。
对该帖子问题的评论(由 mike-seymour 撰写)表明 C++11 在这个问题上是明确的,在deque
s 的情况下。我的问题是关于所有容器:
- 在 C++11 中,是否有任何容器操作可能使过去的迭代器无效,并且这种行为在语言规范中是模棱两可的?
换个说法,
- 在执行一个容器操作后,我是否可以相信一个过去迭代器的有效性,但它并没有说它可能会使过去的迭代器失效?