Правила аннулирования конечного итератора
Что касается этого вопроса о правилах аннулирования итераторов, то очевидно, что дух стандарта означает, например, что "стирание в середине dequed делает недействительными все итераторы, а ссылки на элементы deque" также относятся к конечному итератору,
Однако я нигде не могу найти, что стандарт делает это явным, и, строго говоря, конечный итератор не является итератором для элемента в контейнере.
Стандарт 2003 проясняет это где-нибудь?
1 ответ
Например, 23.1/10:
нет
swap()
Функция делает недействительными любые ссылки, указатели или итераторы, ссылающиеся на элементы заменяемых контейнеров. [ Обратите вниманиеend()
Итератор не ссылается ни на один элемент, поэтому он может быть признан недействительным. —Конечная записка]
Я не знаю, можем ли мы быть уверены, что итератор, ссылающийся на элемент, последовательно использовался в Стандарте для исключения конечных итераторов:/
Как сказано в комментарии, я предполагаю, что это позволяет конечным итераторам указывать на значения часового в контейнере.
Например, типичный дважды связанный List
реализация заключается в создании Node
структура, и есть один Node
по значению в пределах List
действовать как конечный узел.