双端队列(deque),顾名思义,两端都可以操作,插入和删除。而且,还可以在中间进行操作。
内部采用线性表顺序结构,与vector不同的是,deque采用分块的线性存储结构存储数据,每块大小512字节。
所有的deque块使用一个Map块进行管理,每个Map数据项纪录各个deque块的首地址。
当考虑容器内部的内存分配策略和操作性能时,deque相对于vector更有优势,同时,也可以用下标来访问。
下面是vector和queue的链接:
vector:http://blog.csdn.net/lady_killer9/article/details/79237116
queue:http://blog.csdn.net/lady_killer9/article/details/79261798
代码:
/*
deque
Author:YuBo
Date:2018/2/5
*/
#include<iostream>
#include<deque>
using namespace std;
deque<int> d;
deque<int>::iterator it;
void menu()
{
cout<<"******1.入队 2.出队**********"<<endl;
cout<<"******3.读取队顶 4.读取队尾******"<<endl;
cout<<"******5.队中元素个数 6.显示队列******"<<endl;
cout<<"******7.退出 **********"<<endl;
}
void PUSH()
{
int i,j,place,n,N;
cout<<"******1.前插 2.后插 3.中间插入*****"<<endl;
cin>>j;
switch(j)
{
case 1:{//前面插入,后移
cout<<"请输入你要输入的整数个数:"<<endl;
cin>>N;
cout<<"请输入"<<N<<"个整数:"<<endl;
for(i=0;i<N;i++)
{
cin>>n;
d.push_front(n);
}
}break;
case 2:{ //从后面插入,扩张队列
cout<<"请输入你要输入的整数个数:"<<endl;
cin>>N;
cout<<"请输入"<<N<<"个整数:"<<endl;
for(i=0;i<N;i++)
{
cin>>n;
d.push_back(n);
}
}break;
case 3:{//中间插,后移
cout<<"请输入你要插入的位置(首位置为0):"<<endl;
cin>>place;
cout<<"请输入你要插入的数值:"<<endl;
cin>>n;
d.insert(d.begin()+place,n);
}break;
default:cout<<"输入错误!"<<endl;
}
}
void POP()
{
int i,j,place,N;
cout<<"******1.前删 2.后删 3.中间删 4.清空*****"<<endl;
cin>>j;
switch(j)
{
case 1:{
cout<<"请输入你要删除的整数个数:"<<endl;
cin>>N;
if(N>d.size())cout<<"里面没有这么多元素。。。"<<endl;
else{
for(i=0;i<N;i++)
{
d.pop_front();
}
}
}break;
case 2:{
cout<<"请输入你要删除的整数个数:"<<endl;
cin>>N;
if(N>d.size())cout<<"里面没有这么多元素。。。"<<endl;
else{
for(i=0;i<N;i++)
{
d.pop_back();
}
}
}break;
case 3:{
cout<<"请输入你要删除的位置(首位置为0):"<<endl;
cin>>place;
if(place<0||place>d.size())cout<<"位置超界。"<<endl;
else{
it=d.begin();
d.erase(it+place);
}
}break;
case 4:{
d.clear();
}break;
default:cout<<"输入错误!"<<endl;
}
}
void Getfront()
{
if(d.empty())cout<<"队已经空了!"<<endl;
else cout<<"队顶元素为:"<<d.front()<<endl;
}
void Getback()
{
if(d.empty())cout<<"队已经空了!"<<endl;
else cout<<"队尾元素为:"<<d.back()<<endl;
}
void Getsize()
{
cout<<"双端队列的大小为:"<<d.size()<<endl;
}
void Display()
{
int i;
for(i=0;i<d.size();i++)
cout<<d[i]<<" ";
cout<<endl;
}
int main()
{
int i;
while(1)
{
menu();
cout<<"请输入菜单号:"<<endl;
cin>>i;
if(i==7)break;
switch(i)
{
case 1:PUSH();break;
case 2:POP();break;
case 3:Getfront();break;
case 4:Getback();break;
case 5:Getsize();break;
case 6:Display();break;
default:cout<<"输入错误!";break;
}
}
return 0;
}
运行截图:
有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。