Стандартная библиотека 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 <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 <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().
Другие расширения