前面我们已经接触到array、vector容器,掌握里一定的基础。现在我们开始进行deque容器的学习。duque,double-ended queue,意思就是双端队列,该容器首尾都能够进行增删元素操作且其时间复杂度为O(1)。deque底层是中控区+缓冲区,可以理解为通过指针链接数组块。deque与vector极其相似,下面展示其所有成员函数:

类别成员函数函数签名说明
元素访问atreference at(size_type pos)带边界检查的访问
operator[]reference operator[](size_type pos)下标访问
frontreference front()访问第一个元素
backreference back()访问最后一个元素
迭代器beginiterator begin()指向首元素的迭代器
enditerator end()指向尾后元素的迭代器
rbeginreverse_iterator rbegin()指向尾元素的逆向迭代器
rendreverse_iterator rend()指向首前元素的逆向迭代器
容量emptybool empty() const检查是否为空
sizesize_type size() const返回元素个数
max_sizesize_type max_size() const返回可容纳的最大元素数
shrink_to_fitvoid shrink_to_fit()请求移除未使用的容量 (C++11)
修改clearvoid clear()清除所有元素
insertiterator insert(const_iterator pos, const T& value)在指定位置插入元素
emplacetemplate<class... Args> iterator emplace(const_iterator pos, Args&&... args)在位置原地构造元素 (C++11)
eraseiterator erase(const_iterator pos)擦除指定位置元素
push_backvoid push_back(const T& value)尾部添加元素
emplace_backtemplate<class... Args> void emplace_back(Args&&... args)尾部原地构造元素 (C++11)
pop_backvoid pop_back()移除尾部元素
push_frontvoid push_front(const T& value)头部添加元素
emplace_fronttemplate<class... Args> void emplace_front(Args&&... args)头部原地构造元素 (C++11)
pop_frontvoid pop_front()移除头部元素
resizevoid resize(size_type count)改变大小
swapvoid swap(deque& other)

不过需要注意,deque里没有reserve()预存这个概念。双端列表通常用来实现双向BFS,提高搜索效率。

如何创建一个deque呢?让我来通过代码告诉读者:

#include<bits/stdc++.h>//万能头文件,竞赛推荐
#include<deque>//使用deque需要包含该头文件 
using namespace std;
void test()
{
/*创建 deque*/
cout << "开始创建deque \n" ;
deque<int> dq1;//直接创建
deque<int> dq2{1,2,3,4,5};//初始化链表 
deque<int> dq3(5,0);//n个体的形式创建deque
deque<int> dq4(dq2);//拷贝构造函数
deque<int> dq5;
dq5=dq2;//等号运算符重载赋值 
} 
int main(){
    test();
    return 0;

    }

编译结果为:

创建deque

能够编译,说明我们的代码没有问题。

点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)