std::deque (double-ended queue) — это последовательный контейнер, который позволяет эффективно добавлять и удалять элементы как в начале, так и в конце. Он реализуется как последовательность блоков памяти, что обеспечивает быстрый доступ к любому элементу по индексу (почти как в std::vector), но без необходимости перемещать существующие элементы при вставке/удалении в начале.
Основные характеристики:
std::vector.std::deque не гарантируют оставаться действительными после вставок/удалений, кроме как в конце (после push_back/pop_back) и начале (после push_front/pop_front), если вставляемый/удаляемый элемент не приводил к перераспределению всех блоков.Используется, когда требуется частая вставка или удаление элементов с обоих концов, а также произвольный доступ.
Пример использования:
cpp
Сравнение с std::vector:
| Признак | std::vector | std::deque |
|---|---|---|
| Вставка/Удаление в конце | O(1) амортизированно | O(1) |
| Вставка/Удаление в начале | O(n) | O(1) |
| Вставка/Удаление в середине | O(n) | O(n) |
| Произвольный доступ | O(1) | O(1) |
| Непрерывное хранение | Гарантировано | Не гарантировано (блоки памяти) |
| Действительность итераторов | Инвалидация при реаллокации/вставке/удалении кроме конца | Меньше гарантий, зависит от операции |