Является ли итератор недействительным после:
string b "Some string"; auto beg_ = b.begin(); auto end_ = b.end(); b.erase(beg_);
Да, но erase возвращает действительный итератор, который можно использовать для продолжения цикла:
Для остальных членов функция возвращает итератор члена тип string :: iterator со ссылкой на персонаж, который сейчас занимает позиция первого персонажа Стерли, или, если нет такого персонажа существует, возвращает end ().
Источник: http://www.cplusplus.com/reference/string/string/erase/
Из того, что я понимаю, да. Операции удаления и вставки делают недействительными итераторы.
Но erase (итератор) также возвращает итератор, который вы можете использовать.
Да
http://www.sgi.com/tech/stl/basic_string.html
Итераторы могут быть аннулированы путем замены, резервирования, вставки и удаления (а также функциями, эквивалентными вставке и / или удалению, напримеркак очистить, изменить размер, добавить и заменить).Кроме того, однако, первый вызов любой неконстантной функции-члена, включая неконстантную версию begin () или operator [], может сделать недействительными итераторы.
Да, Стандарт говорит
Ссылки, указатели и итераторы, ссылающиеся на элементы последовательности basic_string, могут быть признаны недействительными следующими объектами basic_string: Вызов неконстантных функций-членов, кроме operator[](), at(), begin(), rbegin(), end() и rend().
Ссылки, указатели и итераторы, ссылающиеся на элементы последовательности basic_string, могут быть признаны недействительными следующими объектами basic_string:
basic_string
operator[]()
at()
begin()
rbegin()
end()
rend()