[C++]-deque 双端队列

什么是双端队列

双端队列(Double Ended Queue)是一种支持首尾端高效地插入数据支持随机访问的容器。它可以在需要的时候改变自身大小,完成了标准的C++数据结构中队列的所有功能。

内部实现

双端队列内部实现不如vector直观。双端队列中的数据被表示为一个分段的数组,容器中的元素分段保存在一个个大小固定的数组中。此外,容器还需要维护一个用来存放这些数组首地址的索引数组。也正是因为数据存放不连续,导致deque的随机访问没有vector快。

双端队列的定义和初始化

#include<deque>  // 头文件
deque<type> deq;  // 声明一个元素类型为type的双端队列que
deque<type> deq(size);  // 声明一个类型为type、含有size个默认值初始化元素的的双端队列que
deque<type> deq(size, value);  // 声明一个元素类型为type、含有size个value元素的双端队列que
deque<type> deq(mydeque);  // deq是mydeque的一个副本
deque<type> deq(first, last);  // 使用迭代器first、last范围内的元素初始化deq

双端队列的常用方法

deq.push_back()   //在队尾插入元素
deq.push_front()   //在队首插入元素
deq.insert(deq.begin()+1,9);   //第一个元素之后插入9,后面元素后移
deq.size()   //双端队列的大小
deq.empty()   //判断是否为空
deq.begin()   //队首的指针,指向队首元素
deq.end()   //队尾元素的下一位作为指针
deq.rbegin()  //指向最后一个元素的指针
deq.rend()   //指向第一个元素的前一个位置的指针
deq.erase(point)   //删除指针piont所指的元素
deq.clear()   //删除所有元素
deq.pop_front()   //弹出队首元素
deq.pop_back()   //弹出队尾元素
#include<iostream>
#include<deque>
using namespace std;

void Print(deque<int>deq) // 打印 
{
	for(deque<int>::iterator iter=deq.begin(); iter<deq.end(); iter++)
		cout<<*iter<<"\t"; cout<<endl;
}

int main()
{
	deque<int>deq(6,2);
	for(int i=0; i<deq.size(); i++)
		cout<<deq[i]<<"\t"; cout<<endl; // 下标随机访问 
	
	deq.push_front(1); // 队首插入 
	deq.push_back(3);  // 队尾插入 
	Print(deq);
	
	deq.insert(deq.begin()+2,22); // 指定位置插入数据,后面数据依次后移 
	Print(deq);
		
	deq.erase(deq.begin()+2);  // 删除指定的元素 
	Print(deq);
		
	deq.pop_back(); deq.pop_front(); // 弹出队尾队首元素,没有返回值 
	Print(deq);
	
	deq.clear(); // 清楚整个队列 
	cout<<deq.empty();
 } 
 
 /*
运行结果:
2       2       2       2       2       2
1       2       2       2       2       2       2       3
1       2       22      2       2       2       2       2       3
1       2       2       2       2       2       2       3
2       2       2       2       2       2
1 
 */ 

感谢

  1. 《C++语言程序设计(第四版)》 清华大学出版社
  2. https://blog.csdn.net/weixin_44915226/article/details/105224513
  3. https://blog.csdn.net/hero_myself/article/details/52312644
posted @ 2020-04-14 22:14  世纪小小孟  阅读(248)  评论(0编辑  收藏  举报