头文件:#include<deque>
构造方法:
①、创建一个没有任何元素的双端队列:deque<type> deq
②、用另一个类型相同双端队列初始化该双端队列:deque<type> deq(otherDeq)
③、初始化一个固定size的双端队列:deque<type> deq(size)
④、初始化n个相同元素的双端队列:deque<type> deq(n, element)
⑤、初始化双端队列中的某一段元素,从begin 到 end-1:deque<type> deq(begin, end)
操作:
①、赋值n个元素的拷贝给双端队列:deq.assign(n,elem)
②、赋值一段迭代器的值给双端队列:deq.assign(beg,end)
③、添加一个元素在开头(结尾同理):deq.push_front(elem)
④、删除第一个元素(结尾同理):deq.pop_front()
⑤、取固定位置的元素:deq.at(index)
⑥、取固定位置的元素:deq[index]
⑦、返回第一个元素(不检测容器是否为空):deq.front()
⑧、返回最后一个元素(不检测容器是否为空):deq.back()
例题:

#include<bits/stdc++.h> using namespace std; #define mem(a,b) memset(a,b,sizeof(a)) const int maxn=15e4+10; int n,m,w; map<int,deque<int> > a; void read(int &x) { char ch = getchar();x = 0; for (; ch < '0' || ch > '9'; ch = getchar()); for (; ch >='0' && ch <= '9'; ch = getchar()) x = x * 10 + ch - '0'; } int main() { int i,j; while(scanf("%d%d",&n,&m)!=EOF){ for(i=1;i<=n;i++) a[i].clear(); int ki,u,v; while(m--){ read(ki); if(ki==1){ read(u),read(w),read(v); if(w==0) a[u].push_front(v); else a[u].push_back(v); } else if(ki==2){ read(u),read(w); if(a[u].empty()){ printf("-1 "); } else{ if(w==0){ printf("%d ",a[u].front()); a[u].pop_front(); } else{ printf("%d ",a[u].back()); a[u].pop_back(); } } } else{ read(u),read(v),read(w); if(w){ a[u].insert(a[u].end(),a[v].rbegin(),a[v].rend()),a[v].clear(); } else a[u].insert(a[u].end(),a[v].begin(),a[v].end()),a[v].clear(); } } } return 0; }