ИМХО, deque - это набор блоков с первым блоком, растущим в одном направлении, и последним блоком в противоположном направлении.
Ваше мнение является вашей прерогативой, но оно неверно. :)
deque
- это такой контейнер семантически , но с точки зрения реализации он предназначен для реализации одним или несколькими блоками памяти. Правила аннулирования итераторов C ++ исходят из реализации, вот почему. Возможно, это небольшая утечка абстракции, но, ну, что угодно.
Документация SGI STL не является надлежащей документацией для чтения, поскольку SGI STL не является стандартной библиотекой C ++ . К сожалению, Йосуттис - один из тех, кто называет его «STL», и это привело вас в замешательство.
Ниже приводятся выдержки из: - Стандартная библиотека C ++: Учебное пособие и справочник Николая М. Йозуттиса
Любая вставка или удаление элементов , отличных от в начале или конце, делает недействительными все указатели, ссылки и итераторы, которые ссылаются на элементы deque.
Проще говоря, этот отрывок из Josuttis вводит в заблуждение , подразумевая, что вставка или удаление элементов, которые равны в начале или конце, делают не недействительными указатели , ссылки или итераторы & hellip; хотя стоит отметить, что он никогда не выходит и прямо заявляет об этом.
Вот настоящие, правильные, официальные правила для std::deque
:
C ++ 03
Вставка : все итераторы и ссылки недействительны, если только вставленный элемент не находится в конце (передний или задний) deque (в этом случае все итераторы недействительны, но ссылки на элементы не затрагиваются) [23.2.1.3/1]
Стирание : все итераторы и ссылки недействительны, если только стертые элементы не находятся в конце (передний или задний) deque (в этом случае только итераторы и ссылки на стертые элементы являются признан недействительным) [23.2.1.3/4]
Изменение размера : согласно вставке / удалению [23.2.1.2/1]
C ++ 11
Вставка : все итераторы и ссылки недействительны, если только вставленный элемент не находится в конце (передний или задний) deque (в этом случае все итераторы недействительны, но ссылки на элементы не изменяются) [23.3.3.4/1]
Стирание : стирание последнего элемента делает недействительными только итераторы и ссылки на стертые элементы и итератор «за конец»; удаление первого элемента делает недействительными только итераторы и ссылки на стертые элементы; Стирание любых других элементов делает недействительными все итераторы и ссылки (включая итератор конца-в-конце) [23.3.3.4/4]
Изменение размера : согласно вставке / стиранию [23.3.3.4/1]
Дальнейшее чтение
Я не уверен, какую дополнительную ссылку на достоверные источники вы ищете & mdash; соответствующий стандартный отрывок уже процитирован и процитирован.