Недействительный итератор прошлого в C ++ 11
Самый популярный пост на C ++Правила аннулирования итераторов утверждает, что неясно, являются ли последние итераторы (то есть те, которые возвращеныend()
, cend()
, rend()
, а такжеcrend()
) аннулируются в соответствии с теми же правилами, что и обычные итераторы, которые указывают на элементы в контейнере. Эти утверждения, сделанные как для C ++ 2003, так и для 2011 года, относятся к обсуждениюПравила аннулирования конечного итераторагде принятый ответ предполагает, что стандарт 2003 года неоднозначен по этому вопросу. Этот вывод основан на комментарии в 23.1 / 10 (в контекстеswap()
) это, по-видимому, подразумевает, что, когда в спецификации явно не упоминается недействительность прошлых итераторов, они могут быть признаны недействительными.
Комментарий к этому посту (автор mike-seymour) предполагает, что C ++ 11 в этом вопросе недвусмысленен.deque
s. Мой вопрос обо всех контейнерах:
Сказано по-другому,
Can I trust the validity of a past-the-end iterator after performing a container operation that does not say it may invalidate the past-the-end iterators?