1. 双端队列用法类似于 vector ;
不同点:deque 对两端都可以操作。
vector只能对尾端操作。
2.掌握了双端队列的基本用法,对于 vector、stack_栈、queue_队列的操作只少不多。
deque的基本操作--增删改查
#include<stdio.h>
#include<iostream>
#include<cstdio>
#include<deque>
using namespace std;
int main()
{
deque<char>s(5,'A');
deque<char>s2(5,'B');
//重置容器长度
s2.resize(10,'C');//重置容器元素为 10个,不足的位置用字符 'B'代替
s2.resize(3);//重置元素为 3个,多余的删除
//修改
s.at(3)='C'; //修改第四个元素
char c3=s.at(3);
cout<<c3<<" \n";
s2.at(1)='W';
s2.at(2)='X';
s2.at(3)='Y';
s2.at(4)='Z';
//以数组下标的形式操作
cout<<s2[0]<<","<<s2[1]<<","<<s2[2]<<","<<s2[3]<<","<<s2[4]<<"."<<"\n";
//插入
s2.insert(s2.begin()+2,'X');//在容器 s2的第二个位置插入字符 'X'
s2.insert(s2.begin()+4,5,'Z');//在容器 s2的第四个位置插入 5 个字符 'Z'
s2.insert(s2.begin(),s.begin(),s.end());//在容器 s2的开头插入容器s
s2.insert(s2.end(),s.begin(),s.end());//在容器 s2的最后插入容器s
cout<<s2.size()<<"\n";
//删除
s2.erase(s2.begin()+3);//删除第四个元素
s2.erase(s2.begin()+1,s2.begin()+4);//删除第 2个到第 4个元素(左闭右开)
//遍历
//迭代器正向遍历
deque<char>::iterator it;
for(it=s2.begin();it!=s2.end();it++)
{
cout<<*it<<" ";
}
cout<<"\n";
//迭代器反向遍历
deque<char>::reverse_iterator it1;
for(it1=s2.rbegin();it1!=s2.rend();it1++)
{
cout<<*it1<<" ";
}
}
(下面这个有点长,有点乱 ,掌握基本操作后,自己随便写的运行实现):
//万能头文件 #include<bits/stdc++.h>
#include<cstdio>
#include<iostream>
#include<deque>
using namespace std;
int main()
{
ios::sync_with_stdio(false);//加快cin,cout的速度
cin.tie(0);
/*--1--*--*--定义初始化队列_使用赋值操作--*--*--*/
deque<char> str(10,'A');
deque<char> str1;
str1=str;
/*--2 --*--*--定义迭代器,遍历_基础 队列str --*--*--*/
deque<char>::iterator it;
for(it=str1.begin();it!=str1.end();it++)
cout<<*it<<" ";
cout<<endl;
/*--*** 增强for用不了 ***--*/
//for(char tmp : str)
//cout<<tmp<<" & ";
/*--3--*--*--对容器 判空、清除、获取长度 --*--*--*/
bool idempty=str1.empty();
if(idempty)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
int temp_len1 =str1.size();
cout<<temp_len1<<"\n";
str1.clear();
if(str1.empty())
cout<<"YES"<<"\n";
else
cout<<"NO"<<"\n";
/*-------以下-对容器中的元素--获取--修改--插入--删除--遍历---------------------*/
/*--1--*--*--数组下标操作符重载 --*--*--*/
deque<int>d1(10,1);//定义+初始化
int i1=d1[1];
cout<<"i1="<<i1<<endl;
/*--1'--*--*--获取和修改容器元素 --*--*--*/
d1.at(3)=4;
int i2=d1.at(3);
cout<<"i2= "<<i2<<"\n";
/*--2--*--*--尾部--插入元素,删除元素 --*--*--*/
deque<int>::iterator it1;//定义迭代器,注意迭代器的类型
d1.push_back('C');//后进或删除
for(it1=d1.begin();it1<d1.begin()+11;it1++)
cout<<" "<<*it1<<" ";
cout<<"\n";
d1.pop_back();
/*--3--*--*--头部--插入元素,删除元素--*--*--*/
d1.push_front(404);
d1.push_front(666);
d1.pop_front();
for(it1=d1.begin();it1!=d1.end();it1++)
cout<<" "<<*it1<<" ";
d1.push_front('45') ;
cout<<"\n";
/*--4--*--*--获取--头部和尾部元素 --*--*--*/
int start1=d1.front();
int end1=d1.back();
cout<<"star1= "<<start1<<"\n"<<"end1= "<<end1<<"\n";
/*--5--*--*--任意位置--插入、删除元素--*--*--*/
str1.insert(str1.begin()+4,'x');
for(it=str1.begin();it!=str1.end();it++)
cout<<*it<<" ";
return 0;
}