Только сейчас я читаю книгу Джозуттиса по STL.
Насколько я знаю, вектор c ++ - это массив c, который можно перераспределять. Итак, я понимаю, почему после push_back () все итераторы и ссылки могут стать недействительными.
Но мой вопрос о std :: deque. Как я знаю, это массив больших блоков (c-массив c-массивов). Таким образом, push_front () вставляет элемент в начале и, если места нет, deque выделяет новый блок и помещает элемент в конец выделенного блока.
После insert () посередине все ссылки и итераторы становятся недействительными, и я понимаю, почему - все элементы перемещаются.
Но я действительно неправильно понимаю фразу "... после push_back () и push_front () все ссылки остаются действительными, а итераторы - нет" (та же фраза может быть найдена @ standard: 23.2.2.3)
Что это значит ?! Если ссылки действительны, то deque не сможет перераспределить (== переместить) свои элементы. Так почему итераторы становятся недействительными? Почему я не могу использовать их после вставки неподвижных элементов? Или фраза означает, что я не могу быть уверен в равенстве итераторов для start () или end () и переполнения?
Также хочу отметить, что после erase () все итераторы и ссылки остаются действительными (кроме стертого :-)).
PS: пожалуйста, не отвечайте в «стандартной» форме: «его нельзя использовать, потому что СТАНДАРТ говорит об этом».
Я хочу понять, почему, что может случиться.