Стандарт C ++ не определяет, как реализован deque. Не требуется выделять новое пространство, выделяя новый блок и связывая его с предыдущими, все, что требуется, - это чтобы амортизация вставки на каждом конце была постоянным временем.
Итак, хотя легко понять, как реализовать deque, чтобы он гарантированно дал вам [*], это не единственный способ сделать это.
[*] Итераторы имеют ссылку на элемент, плюс ссылку на блок, в котором он находится, чтобы они могли продолжать идти вперед / назад с конца блока, когда достигают их. Кроме того, я полагаю, что ссылка на саму деку такова, что operator+
может быть постоянным временем, как и ожидалось для итераторов с произвольным доступом - проследить цепочку ссылок от блока к блоку недостаточно.