STL之双向队列(dequeue)

Posted lyp-bird

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STL之双向队列(dequeue)相关的知识,希望对你有一定的参考价值。

//双向队列 deque
#include <deque>
#include <cstdio>
#include <algorithm>
using namespace std;
int main()
{
deque<int> ideq(20);//Create a deque ideq with 20 elements of default value 0
deque<int>::iterator pos;
int i;


for (i = 0; i < 20; ++i)//一开始它们的初值都是0
printf("%d ", ideq[i]);
putchar(‘ ‘);

//使用assign()赋值 assign在计算机中就是赋值的意思
for (i = 0; i < 20; ++i)
ideq[i] = i;

//输出deque
printf("输出deque中数据: ");
for (i = 0; i < 20; ++i)
printf("%d ", ideq[i]);
putchar(‘ ‘);

//在头尾加入新数据
printf(" 在头尾加入新数据... ");
ideq.push_back(100);
ideq.push_front(i);

//输出deque
printf(" 输出deque中数据: ");
for (pos = ideq.begin(); pos != ideq.end(); pos++)
printf("%d ", *pos);
putchar(‘ ‘);

//查找
const int FINDNUMBER = 19;
printf(" 查找%d ", FINDNUMBER);
pos = find(ideq.begin(), ideq.end(), FINDNUMBER);
if (pos != ideq.end())
printf("find %d success ", *pos);
else
printf("find failed ");

//在头尾删除数据
printf(" 在头尾删除数据... ");
ideq.pop_back();
ideq.pop_front();

//输出deque
printf(" 输出deque中数据: ");
for (pos = ideq.begin(); pos != ideq.end(); pos++)
printf("%d ", *pos);
putchar(‘ ‘);
return 0;
}

 

以上代码是一个演示qwq;

deque双向队列是一种双向开口的连续线性空间,可以高效的在头尾两端插入和删除元素,deque在接口上和vector非常相似,下面就总结一下deque的常用成员函数:

(本人技术水平比较差,列不全请见谅qwq)

这是基础操作:

deque<int> c(20); //建立一个int类型的有20位的双向队列

c.front() //返回该双向队列的第一个数据

c.back() //返回该双向队列的最后一个数据

c.empty()  //判断该循环队列是否为空

c.maxsize()  //返回循环队列中最大数据的数量

c.size()   //返回循环队列实际元素的个数

c.begin()   //这是指向该双向队列第一个数据的迭代器

c.end()   //这是指向该双向队列最后一个数据的迭代器

c.rbegin() //指向逆向队列的第一个数据

c1.swap(c2)    //将c1与c2的元素互换
swap(c1,c2)    //同上

c.rend()  //指向逆向队列最后一个位置的下一个位置的迭代器

 

 

 

这是添加操作:

c.push_front()   //在头部插入一个数据

c.push_back()   //在尾部插入一个数据

c.insert(pos,x)   //在pos位置插入一个x的拷贝,并返回新数据的位置

c.insert(pos,begin,end)   //在pos位置插入在[begin,end)之间的数据,无返回值

c.pop_back()  //删除最后一个数据

c.pop_front()  //删除第一个数据

c.erase(pos)   //删除pos位置的数据,并返回下一个位置的迭代器

x.erase(begin,end)  //删除[begin,end)区间的数据,返回下一个数据的位置

 

但是不知道是什么玄学原因,deque的随机访问和遍历数据相比而言会比vector慢一些;

但是我不会呐qwq,因为我弱qwq。

 

 

好哒,写完撒花(qwq)



























































以上是关于STL之双向队列(dequeue)的主要内容,如果未能解决你的问题,请参考以下文章

STL之deque用法

6-5-2:STL之stack和queue——双端队列deque

双向队列(STL做法)

java并发之阻塞队列

C++ 常用 stl容器(vector向量,stack栈,queue队列,deque双向队列,map,set)

STL系列之三 queue 单向队列