• 可以访问和修改队首队尾的支持sort的容器

STL

  • deque<类型>名称

  • 方法:

    clear():清空

    front():返回队首值

    back():返回队尾值

    push_fornt(val):队首插入值

    push_back(val):队尾插入值

    pop_front():移除队首值

    pop_back():移除队尾值

    size():返回容器中元素个数

    empty():判断容器是否为空

    begin():返回其实迭代器(指针)

    end():返回末尾迭代器

    insert(pos,val):在迭代器位置插入值

    erase(pos):去除迭代器位置

    支持sort,cmp,也可以在结构体中直接重载小于号


#include<bits/stdc++.h>
using namespace std;
bool cmp(int a,int b){
	return a>b;
}
int main(){
	int n,m,rev=0;
	deque<int> a;
	scanf("%d%d",&n,&m);
	for(int i=0;i<m;i++){
		int tp,v;
		scanf("%d",&tp);
		switch (tp){
		case 1:
			scanf("%d",&v);
			if(rev%2==0) a.push_front(v);
			else a.push_back(v);
			break;
		case 2:
			if(rev%2==0) a.pop_front();
			else a.pop_back();           
			break;
		case 3:
			scanf("%d",&v);
			if(rev%2==1) a.push_front(v);
			else a.push_back(v);
			break;
		case 4:
			if(rev%2==1) a.pop_front();
			else a.pop_back();           
			break;
		case 5:
			rev++;
			break;
		case 6:
			printf("%d\n",a.size());
			if(rev%2==0){
				for(int i=0;i<a.size();i++){
					printf("%d ",*(a.begin()+i));
				}
			}
			else{
				for(int i=1;i<=a.size();i++){
					printf("%d ",*(a.end()-i));
				}
			}
			printf("\n");
			break;
		case 7:
			if(rev%2==0) sort(a.begin(),a.end());
			else sort(a.begin(),a.end(),cmp);
		}
	}
	return 0;
}