在 C++中,<deque> 是标准模板库(STL)的一部分,它提供了双端队列(double-ended queue)的实现。
双端队列是一种允许在两端进行插入和删除操作的线性数据结构。
<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(size_type n, const T& value)
value
deque(initializer_list<T> il)
il
operator=
assign()
at(size_type pos)
pos
operator[](size_type pos)
front()
back()
begin()
end()
rbegin()
rend()
empty()
size()
max_size()
clear()
insert(iterator pos, const T& value)
erase(iterator pos)
push_back(const T& value)
pop_back()
push_front(const T& value)
pop_front()
resize(size_type count)
count
swap(deque& other)
get_allocator()
实例
下面是一个使用 <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 << "Deque contains: "; for (int i = 0; i < myDeque.size(); ++i) { std::cout << myDeque[i] << " "; } std::cout << std::endl; // 删除元素 myDeque.pop_back(); myDeque.pop_front(); // 再次访问元素 std::cout << "Deque after popping: "; 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 长度的时候,可以使用 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 << "Front element: " << d.front() << std::endl; // 访问后端元素 std::cout << "Back element: " << d.back() << std::endl; // 修改前端元素 d.front() = 15; // 修改后端元素 d.back() = 25; // 再次访问元素 std::cout << "Modified front element: " << d.front() << std::endl; std::cout << "Modified back element: " << d.back() << std::endl; return 0;}
输出结果为:
Front element: 5 Back element: 20 Modified front element: 15 Modified back element: 25
注意:在使用 front() 或 back() 之前,确保双端队列不为空,否则会引发未定义的行为。如果需要检查双端队列是否为空,可以使用 empty() 成员函数。