deque<ll>q;//定义一个双向队列q,类型为long long q.push_front(a);//将a从队首插入队列 q.push_back(a);//将a从队尾插入队列 q.pop_front();//队首弹掉一个元素 q.pop_back();//队尾弹出一个元素 a=q.front();//返回队首元素 a=q.back();//返回队尾元素 a=q.size();//返回双向队列的大小 a=q.empty();//判断双向队列是否为空,为空返回1,不为空返回0 deque<ll>p(q);//将队列q复制一个新的队列p q.clear(); //将队列q清空
C++ Double Ended Queues(双向队列)
双向队列和向量很相似,但是它允许在容器头部快速插入和删除(就像在尾部一样)。
Constructors | 创建一个新双向队列 |
Operators | 比较和赋值双向队列 |
assign() | 设置双向队列的值 |
at() | 返回指定的元素 |
back() | 返回最后一个元素 |
begin() | 返回指向第一个元素的迭代器 |
clear() | 删除所有元素 |
empty() | 返回真如果双向队列为空 |
end() | 返回指向尾部的迭代器 |
erase() | 删除一个元素 |
front() | 返回第一个元素 |
get_allocator() | 返回双向队列的配置器 |
insert() | 插入一个元素到双向队列中 |
max_size() | 返回双向队列能容纳的最大元素个数 |
pop_back() | 删除尾部的元素 |
pop_front() | 删除头部的元素 |
push_back() | 在尾部加入一个元素 |
push_front() | 在头部加入一个元素 |
rbegin() | 返回指向尾部的逆向迭代器 |
rend() | 返回指向头部的逆向迭代器 |
resize() | 改变双向队列的大小 |
size() | 返回双向队列中元素的个数 |
swap() | 和另一个双向队列交换元素 |
#include<iostream>
#include<deque>
#include<string>
using namespace std;int main()
{deque<int> deq;int n,l=0,p=0,m[10000];cin>>n;string s;for(int i=1;i<=n;i++){cin>>s;if(s=="LIN"){int d;cin>>d;deq.push_front(d);}else if(s=="RIN"){int d;cin>>d;deq.push_back(d);}else if(s=="LOUT"){if(deq.empty())m[p++]=i;else{//a[l++]=deq.front();deq.pop_front();}}else if(s=="ROUT"){if(deq.empty())m[p++]=i;//cout<<i<<" "<<"ERROR"<<endl;else{deq.pop_back();}}elsem[p++]=i;}if(!deq.empty()){cout<<deq.front();deq.pop_front();}while(!deq.empty()){cout<<" "<<deq.front();deq.pop_front();}cout<<endl;for(int i=0;i<p;i++){cout<<m[i]<<" "<<"ERROR"<<endl;}return 0;
}