总是听人说手写队列或者手写栈比stl快
但是又有很多大佬说stl并不慢
我觉得也不应该慢很多要不发明stl干什么的
不过如果算法写得很烂或者卡常数的时候
还是用一波手写的垂死挣扎一下吧
这里搞一个基本上跟stl用法完全一样的手写栈
STRUCT!
手写准备
struct queue{
int h,t,que[MAXN];
queue(){h=1 , t=0;}//初始化
void push(int x){que[++t] = x;}
void pop(){h++;}
bool empty(){return t<h ? 1 : 0;}//三目运算符狂热爱好者
int front(){return que[h];}
int size(){return t-h+1;}
void clear(){t = h-1;}
//除了题面里要求的四种操作,这里多加了两个供大家食用
};
//压一压行更清晰的说
声明一个队列
struct queue q;
调用函数
q.push();
q.pop();
q.front();
q.size();
q.empty();
//你看,不是不跟stl的使用方法完全一样
更进一步
stl里我们调用队列的时候
queue<int> q;
可以更改<>中的数据类型以达到我们想要的目的
这个手写的也可以
只需要在声明结构体成员的时候把que[]声明成你想要的类型即可
小tip:
这样记得不要声明queue那个库
也不要开bits/stdc++.h
不然
[Error] reference to ‘queue’ is ambiguous
完整CODE
#include<iostream>
using namespace std;
int x,m;
string str;
struct queue{
int que[100005],h,t;
queue() { h=1 , t=0; }
void push(int x) { que[++t] = x; }
void pop() { h++; }
bool empty() { return t<h ? 1 : 0; }
int front() { return que[h]; }
};
struct queue q;
int main(){
scanf("%d",&m);
while(m--) {
cin>>str;
if(str=="push") { cin>>x; q.push(x);}
else if(str=="pop") q.pop();
else if(str=="empty") q.empty() ? cout<<"YES\n" : cout<<"NO\n";
else cout<<q.front()<<endl;
}
return 0;
}
stl的好处在于他是泛型 而不是仅仅兼容int。 队列的功能反而是其次的
啊没考虑到这一点%%%%