首页 > 编程笔记 > C++笔记 阅读:2

C++ std::deque容器的用法(附带实例)

双端队列(double-ended queue,通常简称为 deque)的结构和初始化方法与 queue 普通队列类似,但有一个重要的区别,它允许在队列的两端进行添加和移除操作。因此,它提供了更灵活的数据操作方式。

首先,引入相应的头文件并使用标准命名空间:
#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

相关文章