初学算法之最基础的stl队列
简记为先进先出(first in first out)
它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。
实用:
#include <queue>//头文件
queue<job> a; //声明
声明字符串数组可以用:
queue<char*>a; queue<string>a;
a.push(t[i]); //初始化队列,插入队尾
q.front(); //队首元素
q.back(); //队尾元素
q.size(); //队列元素个数
q.pop(); //删除队列第一个元素
q.empty(); //空返回1,非空返回0
(我第一次使用队列,在初始化的输入方面遇到了一些问题,如下例1)
例1:
#include<cstdio> #include<queue> #include<cstring> using namespace std; char st[111]; int main() { queue<char*>myqueue; int t,n,s,k; scanf("%d",&t); while(t--) { scanf("%d %d",&n,&s); for(int i=0;i<n;i++) { memset(st,0,sizeof(st)); scanf("%s",st); myqueue.push(st); printf("%s\n",myqueue.front()); } } return 0; }
如样例所示,每次输入都覆盖了队列的前端(front)
于是换种写法:
1.(二维数组)
2.(string)
#include<string> queue<string>s;
s.push(p); cout<<s.front()<<endl; //部分代码
二者的输出相同,皆没有被覆盖。样例如下:
后来发现是这里出了问题:
queue<char*>myqueue
这里的char*指向我所输入的st的首地址,因此myqueue.front()取出的其实是st内的字符串,这就是为什么队列的前段(front)为什么会一直被覆盖。