Завершить правила аннулирования итератора

Что касается этого вопроса о правилах аннулирования итератора, кажется очевидным, что дух стандарта означает, например, что "стирание в середине deque делает недействительным все итераторы и ссылки на элементы deque" также ссылаются на конечный итератор.

Однако я не могу найти нигде, что стандарт делает это явным, и, строго говоря, конечный итератор не является итератором для элемента в контейнере.

Указывает ли в стандарте 2003 место где-то?

Ответ 1

Например, 23.1/10:

Функция

no swap() делает недействительными любые ссылки, указатели или итераторы, ссылающиеся на элементы обменяемых контейнеров. [Примечание: Итератор end() не ссылается ни на какой элемент, поэтому он может быть недействительным. -end note]

Я не знаю, можем ли мы быть уверены, что итератор, ссылающийся на элемент, последовательно использовался в стандарте для исключения конечных итераторов:/

Как сказано в комментарии, я предполагаю, что это должно позволить концевым итераторам указывать на значения часового в контейнере.

Например, типичная двухсвязная реализация List заключается в создании структуры Node и имеет значение Node по значению внутри List, чтобы действовать как конец node.