C++ std::deque容器的用法(附带实例)
双端队列(double-ended queue,通常简称为 deque)的结构和初始化方法与 queue 普通队列类似,但有一个重要的区别,它允许在队列的两端进行添加和移除操作。因此,它提供了更灵活的数据操作方式。
首先,引入相应的头文件并使用标准命名空间:
在使用时,请注意在调用 pop_front() 或 pop_back() 前确保双端队列非空,以避免运行时错误。此外,双端队列提供了 clear() 函数,用于快速清空双端队列(将其大小设置为 0)。
与普通队列相比,双端队列灵活性更大,既支持从队尾添加和移除元素,也支持从队头进行相应的操作,非常适用于需要频繁在队列两端操作的场景。
如下代码演示了表中部分成员函数的用法:
首先,引入相应的头文件并使用标准命名空间:
#include <deque> using namespace std;然后,声明双端队列,例如:
deque<T> dq_T; deque<int> dq_int;相较于普通队列,双端队列增加了在队头推入元素和在队尾删除元素的功能。这种灵活性使得双端队列能够应用于更广泛的场景。例如,本书后续讲解的“单调队列”就是基于双端队列实现的。
C++ deque双端队列的基本操作
双端队列提供了一系列基本操作方法以有效管理队列中的元素。这些操作如下表所示。方法 | 作用 | 时间复杂度 |
---|---|---|
push_front(x) | 将元素 x 从队头推入 | O(1) |
push_back(x) | 将元素 x 从队尾推入 | O(1) |
pop_front() | 将队头元素弹出(删除),但不返回该元素 | O(1) |
pop_back() | 将队尾元素弹出(删除),但不返回该元素 | O(1) |
size() | 返回双端队列的大小,即双端队列中的元素个数 | O(1) |
empty() | 返回双端队列是否为空;若为空则返回 true,否则返回 false | O(1) |
front() | 返回队头元素,但不会删除该元素 | O(1) |
back() | 返回队尾元素 | O(1) |
clear() | 清空双端队列,使得大小变为 0 | O(n) |
在使用时,请注意在调用 pop_front() 或 pop_back() 前确保双端队列非空,以避免运行时错误。此外,双端队列提供了 clear() 函数,用于快速清空双端队列(将其大小设置为 0)。
与普通队列相比,双端队列灵活性更大,既支持从队尾添加和移除元素,也支持从队头进行相应的操作,非常适用于需要频繁在队列两端操作的场景。
如下代码演示了表中部分成员函数的用法:
#include <iostream> #include <deque> using namespace std; int main() { //初始化一个空deque容量 deque<int>d; //向d容器中的尾部依次添加 1,2,3 d.push_back(1); //{1} d.push_back(2); //{1,2} d.push_back(3); //{1,2,3} //向d容器的头部添加 0 d.push_front(0); //{0,1,2,3} //调用 size() 成员函数输出该容器存储的字符个数。 printf("元素个数为:%d\n", d.size()); //使用迭代器遍历容器 for (auto i = d.begin(); i < d.end(); i++) { cout << *i << " "; } cout << endl; return 0; }运行结果为:
元素个数为:4
0 1 2 3