Недействительный итератор прошлого в C ++ 11

Самый популярный пост на C ++Правила аннулирования итераторов утверждает, что неясно, являются ли последние итераторы (то есть те, которые возвращеныend(), cend(), rend(), а такжеcrend()) аннулируются в соответствии с теми же правилами, что и обычные итераторы, которые указывают на элементы в контейнере. Эти утверждения, сделанные как для C ++ 2003, так и для 2011 года, относятся к обсуждениюПравила аннулирования конечного итераторагде принятый ответ предполагает, что стандарт 2003 года неоднозначен по этому вопросу. Этот вывод основан на комментарии в 23.1 / 10 (в контекстеswap()) это, по-видимому, подразумевает, что, когда в спецификации явно не упоминается недействительность прошлых итераторов, они могут быть признаны недействительными.

Комментарий к этому посту (автор mike-seymour) предполагает, что C ++ 11 в этом вопросе недвусмысленен.deques. Мой вопрос обо всех контейнерах:

In C++11, are there any container operations that may invalidate a past-the-end iterator, and where this behavior is ambiguous in the language specification?

Сказано по-другому,

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?

Ответы на вопрос(3)

Ваш ответ на вопрос