1.deque
双端队列(dequeue) 采用线性表顺序存储结构,且支持随机访问,即可以直接用下标来访问元素,顾名思义其是双向开口,可以快速在首尾插入、删除数据。
其头文件是<deque>,主要包含函数:
push_back():在队尾压入元素
push_front():在队头压入元素
pop_back():删除最后一个元素
pop_front():删除第一个元素
front():返回第一个元素的引用
back():返回最后一个元素的引用
实际上双端队列的创建、访问、插入等操作和vector类似,如下:
#include<iostream> #include<deque> using namespace std; int main() { deque<int>a; a.push_back(1); a.push_back(2); a.push_front(0); deque<int>::iterator it; for(it=a.begin();it!=a.end();it++)//迭代器访问 cout<<*it<<endl; cout<<a[0]<<" "<<a[1]<<" "<<a[2]<<endl;// 随机访问 return 0; }
注意的是增加数据最好用双端队列成员函数增加,不然迭代器不会更新。
关于其了解,我觉得最好还要通过和vector,queue等对比来加深。
2.与vector、queue、list对比
简单对比
名称 随机存取 中间插删 两端插删 迭代器 vector 快 复杂 尾端方便,前端复杂 有 deque 较快 复杂 两端方便 有 queue 否 无 仅尾入头删 无 list 否 简单 方便 有
总的来说注意以下几点:
1.若需要随机访问操作,则选择vector;
2.若已经知道需要存储元素的数目,则选择vector;
3.若需要随机插入/删除(不仅仅在两端),则选择list
4.只有需要在首端进行插入/删除操作的时候,还要兼顾随机访问效率,才选择deque,否则都选择vector。
5.若既需要随机插入/删除,又需要随机访问,则需要在vector与list间做个折中-deque。
6.明显属于队列的问题才考虑queue。