STL之双向队列

简介: STL之双向队列

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。

相关文章
|
1月前
|
存储 算法 编译器
【C++】初识C++模板与STL
【C++】初识C++模板与STL
|
1月前
|
存储 算法 C++
带你一步认识STL
带你一步认识STL
39 0
|
6月前
|
C++ 容器
【C++】STL之空间配置器(了解)
【C++】STL之空间配置器(了解)
|
3月前
|
算法 安全 Linux
|
6月前
|
存储 算法 C++
|
6月前
|
算法 C++ 容器
STL小结
STL小结
|
6月前
|
算法 C++ 容器
STL注意问题
STL注意问题
|
存储 算法 程序员
c++之STL详解(一)
c++之STL详解(一)
83 0
|
存储 设计模式 算法
c++之STL详解(二)
c++之STL详解(二)
92 0