Правила аннулирования конечного итератора

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

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

Стандарт 2003 проясняет это где-нибудь?

1 ответ

Решение

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

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

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

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

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

Другие вопросы по тегам