Правила аннулирования конечного итератора - PullRequest
25 голосов
/ 22 июня 2011

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

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

Означает ли это где-то в стандарте 2003?

1 Ответ

8 голосов
/ 22 июня 2011

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

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...