Стандартная библиотека C++<deque>

В C++,<deque>является частью Стандартной библиотеки шаблонов (STL), предоставляя реализацию двусторонней очереди.

Deque — это линейная структура данных, которая позволяет выполнять операции вставки и удаления с обоих концов.

<deque>Его полное название — "double-ended queue", а в C++ он существует в виде шаблонного класса, позволяя хранить данные любого типа.

<deque>Это динамический массив, который обеспечивает быстрый произвольный доступ и при этом позволяет эффективно выполнять операции вставки и удаления с обоих концов. Это делает<deque>его идеальным выбором для сценариев, требующих частой вставки и удаления элементов.

Синтаксис

В C++ используйте<deque>Необходимо подключить заголовочный файл#include <deque>. Ниже приведены<deque>Базовый синтаксис:

#include <iostream>
#include <deque>

int main() {
    std::deque<int> myDeque; // 创建一个整数类型的双端队列
    // 接下来可以进行插入、删除等操作
    return 0;
}

Общие операции

Ниже приведены некоторые распространённые функции-члены контейнера std::deque:

Имя функцииОписание функций
deque()конструктор по умолчанию для создания пустогоdequeконтейнера.
deque(size_type n)Создать контейнер, содержащийnэлементы со значениями по умолчаниюdequeконтейнера.
deque(size_type n, const T& value)Создать контейнер, содержащийnзначение равноvalueизdequeконтейнера.
deque(initializer_list<T> il)Использование списка инициализаторовilКонструкторdequeконтейнера.
operator=оператор присваивания для присваиванияdequeконтейнера.
assign()Заменить новым значениемdequeвсе элементы в контейнере.
at(size_type pos)returnposэлемент в позиции, с проверкой диапазона.
operator[](size_type pos)returnposэлемент в позиции, без проверки диапазона.
front()Возвращает ссылку на первый элемент.
back()Возвращает ссылку на последний элемент.
begin()Возвращает итератор на первый элемент.
end()Utirtaaqtuq iteraattur inikkunnut kingullermit ilangarmit kingorna.
rbegin()Возвращает обратный итератор, указывающий на последний элемент.
rend()Возвращает обратный итератор, указывающий на позицию перед первым элементом.
empty()Qaujijaqtuq container imaittuq.
size()Utirtaaqtuq nalli ilangit container-mi.
max_size()Utirtaaqtuq angijualuit nalli ilangit container tigusimajunnaqtangit.
clear()Piiqqaaqtuq tamarmik ilangit container-mit.
insert(iterator pos, const T& value)ВposIlali inikkut.valueIlanga.
erase(iterator pos)RemoveposIlanga inikkut.
push_back(const T& value)Ilali kingullermut container-ip.valueIlanga.
pop_back()Piiqqaaqtuq ilanga kingullermi container-ip.
push_front(const T& value)Ilali sivullirmut container-ip.valueIlanga.
pop_front()Piiqqaaqtuq ilanga sivullirmi container-ip.
resize(size_type count)Изменить размер контейнера доcountдополнительные части заполняются значениями по умолчанию.
swap(deque& other)Поменять местами дваdequeсодержимое контейнера.
get_allocator()Возвращает копию объекта аллокатора, использованного для создания deque.

Пример

Ниже приведён пример использования<deque>Простой пример, включающий операции вставки, доступа и удаления элементов.

Пример

#include <iostream>
#include <deque>

int main() {
    std::deque<int> myDeque;

    // Вставка элементов
    myDeque.push_back(10);
    myDeque.push_back(20);
    myDeque.push_front(5);

    // Доступ к элементам
    std::cout << "Дек содержит: ";
    for (int i = 0; i < myDeque.size(); ++i) {
        std::cout << myDeque[i] << " ";
    }
    std::cout << std::endl;

    // Удалить элементы
    myDeque.pop_back();
    myDeque.pop_front();

    // Снова получить доступ к элементам
    std::cout << "Дек после извлечения: ";
    for (int i = 0; i < myDeque.size(); ++i) {
        std::cout << myDeque[i] << " ";
    }
    std::cout << std::endl;

    return 0;
}

Вывод:

Deque contains: 5 10 20 
Deque after popping: 10 

Когда длина дека неизвестна, deque.front() и deque.back() можно использовать для доступа к переднему и заднему элементам:

Пример

#include <iostream>
#include <deque>

int main() {
    std::deque<int> d;

    // Добавить элементы в дек
    d.push_back(10);
    d.push_back(20);
    d.push_front(5);

    // Доступ к переднему элементу
    std::cout << "Передний элемент: " << d.front() << std::endl;

    // Доступ к заднему элементу
    std::cout << "Задний элемент: " << d.back() << std::endl;

    // Изменение переднего элемента
    d.голова() = 15;

    // Изменение заднего элемента
    d.back() = 25;

    // Снова получить доступ к элементам
    std::cout << "Изменённый передний элемент: " << d.front() << std::endl;
    std::cout << "Изменённый задний элемент: " << d.back() << std::endl;

    return 0;
}

Вывод:

Front element: 5
Back element: 20
Modified front element: 15
Modified back element: 25

Примечание:Перед использованием front() или back() убедитесь, что deque не пуст; в противном случае это приведёт к неопределённому поведению. Если вам нужно проверить, пуст ли deque, можно использовать функцию-член empty().

Другие расширения