Я немного смущен относительно недействительности итератора в deque. (В контексте этого вопроса)
Ниже приведены выдержки из: - стандартной библиотеки С++: учебника и справочника, Николай М. Йосуттис
Любая вставка или удаление элементов кроме в начале или в конце аннулирует все указатели, ссылки, итераторы, которые ссылаются на элементы от deque.
Ниже приведены выдержки из SGI сайт:
Семантика аннулирования итератора для deque выглядит следующим образом. Вставить (включая
push_front
иpush_back
) аннулирует все итераторы, которые ссылаются к деку. Стереть в середине deque аннулирует все итераторы, которые обратитесь к деку. Стереть на начало или конец дека (в том числеpop_front
иpop_back
) аннулирует итератором, только если он указывает на стираемый элемент.
IMHO, deque - это совокупность блоков с первым блоком, растущим в одном направлении, а последний блок в противоположном направлении.
- - -
- - -
| - - ^
| - - |
V - - |
- - -
- - -
push_back, push_front
не должно влиять на итераторы deque (я согласен с Josuttis).
Какое правильное объяснение? что стандарт говорит об этом?