Я провел поиск по реализации deque. Согласно этот пост, deque использует вектор векторов. Я знаю, что нажатие в начале и в конце должно быть как в постоянное время, так и в произвольном доступе. Я думаю, что кольцевой буфер отвечает всем этим требованиям и намного проще. Так почему бы не использовать циклический буфер?
Я также нашел циклический буфер ускорения. Как это сравнивается с деком?
Изменить: хорошо, значит, это как-то связано с правилами аннулирования итераторов. В нем говорится:
все итераторы и ссылки становятся недействительными, если только вставленный элемент не находится в конце (впереди или сзади) двухсторонней очереди (в этом случае все итераторы становятся недействительными, но ссылки на элементы не затрагиваются)
Я понимаю, что для перегрузки оператора, такого как iter++, итераторы должны владеть указателем на карту узлов и указателем на фрагмент, поэтому, если карта узлов перераспределена, итератор становится недействительным. Но поскольку данные никогда не перемещаются, ссылки по-прежнему действительны.
std::deque
является то, что вы никогда не сделаете недействительными итераторы и ссылки при добавлении или удалении элементов с любого конца. С круговым буфером такого не будет. - person Galik   schedule 27.10.2016