目录
1.创建deque对象
头文件:#include<deque>
deque<int> d; //创建没有任何元素的deque对象
deque<float> dd;
deque<int> d(10); //创建具有10个整型元素的deque对象d
deque<int> d(10,8.5); //创建具有10个整型的deque对象d,每个元素的值都是8.5
2.插入元素
push_back(i); //从尾部插入元素i,会不断扩张队列
push_front(i); //从头部插入元素i,只将原有的元素覆盖
insert(d.begin()+1,88); //将d[1]位置赋值为88
3.前向遍历
(1)以数组方式遍历
#include<deque>
#include<iostream>
using namespace std;
int main(){
deque<int> d;
//从尾部连续插入三个元素1 2 3
for(int i=1;i<4;i++){
d.push_back(i);
}
for(int i=0;i<d.size();i++)
cout<<d[i]<<" ";
cout<<endl;
//输出结果:1 2 3
return 0;
}
(2)以前向迭代器的方式遍历
#include<deque>
#include<iostream>
using namespace std;
int main(){
deque<int> d;
//从尾部连续插入三个元素1 2 3
for(int i=1;i<4;i++){
d.push_back(i);
}
deque<int>::iterator it;
for(it=d.begin();it!=d.end();it++)
cout<<*it<<" ";
cout<<endl;
//输出结果:1 2 3
return 0;
}
4.反向遍历
#include<deque>
#include<iostream>
using namespace std;
int main(){
deque<int> d;
//从尾部连续插入三个元素1 2 3
for(int i=1;i<4;i++){
d.push_back(i);
}
//以反向迭代器的方式遍历
deque<int>::reverse_iterator rit;
for(rit=d.rbegin();rit!=d.rend();rit++)
cout<<*rit<<" ";
cout<<endl;
//输出结果:3 2 1
return 0;
}
5.删除元素
可以从双端队列的头部、尾部、中部删除元素,并可以清空双端队列容器。
pop_front(); //从头部删除元素
pop_back(); //从尾部删除元素
erase(d.begin()+1); //从中间删除元素,其参数是迭代器位置
clear() 可以清空双端队列容器
#include<deque>
#include<iostream>
using namespace std;
int main(){
deque<int> d;
//从尾部连续插入三个元素1 2 3
for(int i=1;i<4;i++){
d.push_back(i);
}
deque<int>::iterator it;
for(it=d.begin();it!=d.end();it++)
cout<<*it<<" ";
cout<<endl;
//输出结果:1 2 3
d.clear();
cout<<d.size()<<endl;
//输出结果:0
return 0;
}
6.访问元素
d.front(); //返回第一个数据
d.back(); //返回最后一个数据
d.begin(); //返回指向第一个数据的迭代器
d.end(); //返回指向最后一个数据下一个位置的迭代器
d.rbegin(); //返回指向反向队列的第一个元素的迭代器(即原队列的最后一个元素)
d.rend(); //返回指向反向队列的最后一个元素的下一个位置(即原队列的第一个元素的前一个位置)
7.其他
更详细的请参见这位博友的 STL系列之一 deque双向队列