队列是基本的数据结构之一,特点是”先进先出“。如排队,先进队列的先得到服务。
#include<queue>
using namespace std;
1.定义
queue<int>v;
queue<int>e(v);
queue<char>c;
······
priority_queue<int> q;
2.queue的相关操作
queue容器适配器支持的成员函数
成员函数 | 功能 |
---|---|
empty() | 如果 queue 中没有元素的话,返回 true。 |
size() | 返回 queue 中元素的个数。 |
front() | 返回 queue 中第一个元素的引用。如果 queue 是常量,就返回一个常引用;如果 queue 为空,返回值是未定义 |
back() | 返回 queue 中最后一个元素的引用。如果 queue 是常量,就返回一个常引用;如果 queue 为空,返回值是未定义的。 |
push(const T& obj) | 在 queue 的尾部添加一个元素的副本。这是通过调用底层容器的成员函数 push_back() 来完成的。 |
emplace() | 在 queue 的尾部直接添加一个元素。 |
push(T&& obj) | 以移动的方式在 queue 的尾部添加元素。这是通过调用底层容器的具有右值引用参数的成员函数 push_back() 来完成的。 |
pop() | 删除 queue 中的第一个元素。 |
swap(queue &other_queue) | 将两个 queue 容器适配器中的元素进行互换,需要注意的是,进行互换的 2 个 queue 容器适配器中存储的元素类型以及底层采用的基础容器类型,都必须相同。 |
int x = 2; //
queue<int>q; //
q.push(x); //将x插入队列q
q.front(); //返回队列的第一个元素
q.pop(); //删除队列的第一个元素
q.back(); //返回队列的最后一个元素
q.size(); //返回队列的元素的个数
q.empty(); //返回队列是否为空
3. 优先队列的排序
priority_queue <int,vector<int>,less<int> > p; //从大到小
priority_queue <int,vector<int>,greater<int> > q; //从小到大
struct node{
int x,y; //结构体内重载排序函数
bool operator < (const node & a) const{return x<a.x;}
};
priority_queue <node> q;
4. queue的实例应用
hdu 1702 ACboy needs your help again!
Problem Description
ACboy was kidnapped!!
he miss his mother very much and is very scare now.You can’t image how dark the room he was put into is, so poor 😦.
As a smart ACMer, you want to get ACboy out of the monster’s labyrinth.But when you arrive at the gate of the maze, the monste say :" I have heard that you are very clever, but if can’t solve my problems, you will die with ACboy."
The problems of the monster is shown on the wall:
Each problem’s first line is a integer N(the number of commands), and a word “FIFO” or “FILO”.(you are very happy because you know “FIFO” stands for “First In First Out”, and “FILO” means “First In Last Out”).
and the following N lines, each line is “IN M” or “OUT”, (M represent a integer).
and the answer of a problem is a passowrd of a door, so if you want to rescue ACboy, answer the problem carefully!
Input
The input contains multiple test cases.
The first line has one integer,represent the number oftest cases.
And the input of each subproblem are described above.
Output
For each command “OUT”, you should output a integer depend on the word is “FIFO” or “FILO”, or a word “None” if you don’t have any integer.
Sample Input
4
4 FIFO
IN 1
IN 2
OUT
OUT
4 FILO
IN 1
IN 2
OUT
OUT
5 FIFO
IN 1
IN 2
OUT
OUT
OUT
5 FILO
IN 1
IN 2
OUT
IN 3
OUT
Sample Output
1
2
2
1
1
2
None
2
3
题意: 就是关于stack 和 queue的相关操作。
#include<bits/stdc++.h>
using namespace std;
int main(){
int t, n, temp;
cin >> t;
while(t--){
string str, str1;
queue<int> Q;
stack<int> S;
cin >> n >> str;
for (int i = 0; i < n; i++){
if(str=="FIFO"){
cin >> str1;
if(str1 == "IN"){
cin >> temp;
Q.push(temp);
}
if(str1=="OUT"){
if(Q.empty())
cout << "None" << endl;
else{
printf("%d\n", Q.front());
Q.pop();
}
}
}
else{
cin >> str1;
if(str1=="IN"){
cin >> temp;
S.push(temp);
}
if(str1=="OUT"){
if(S.empty())
cout << "None" << endl;
else{
printf("%d\n", S.top());
S.pop();
}
}
}
}
}
return 0;
}