学长说现在基本上可以开始学习STL中一些标准模板了,今天先总结一下 队列、栈、优先队列
1、队列(queue)
先进先出原则,头文件#include <queue>,定义结构queue<类型>名称;queue<int>q、queue<node>q等;
如:
struct node
{
int x;
}f;
queue<node>q;//结构体类型队列
q.push(f) //将f压入队列的尾部
node t = q.pop()// 弹出队列的第一个元素(队首元素),此函数无返回值
node t = q.front() //返回第一个元素(队首元素)
q.back() //返回最后被压入的元素(队尾元素)
q.empty() //当队列为空时,返回true
q.size() //返回当前状态返回队列的长度2.栈
先进后出原则,头文件#include <stack>,定义结构stack<类型>名称;stack<int>s1;stack<string>s2等
struct node{
int x;
}f;
stack<node>stk;
stk.push(f) //将f压入栈中
stk.pop() //出栈(删除栈顶元素),无返回值
stk.top() //返回当前状态的栈顶元素
stk.size() //栈中的元素个数
stk.empty() //当栈为空时,返回 true3、优先队列
和队列相同,只是加了一步优先级判断,来确定出队顺序,定义方式priority_queue<int>q;
代码模板
#include <iostream>
#include <queue>
#include <cstring>
#include <cstdio>
using namespace std;
struct node{
int x,y;
friend bool operator < (const node &a,const node &b)//操作符重载,不要重载‘>’,会CE
{
return a.x>b.x; //x小的优先级高,先出队
}
}k;
struct cmp //自定义比较函数
{
bool operator ()(int x, int y)
{
return x > y;// x小的 优先级高
}
};
int main()
{
int n;
cin>>n;
priority_queue<int, vector<int>, cmp>Q;// vector容器类型,cmp自定义比较函数
priority_queue<node>q;
for(int i = 0;i< n;i++)
{
cin>>k.x>>k.y;
q.push(k);
Q.push(k.x);
}
puts("---------------------");
while(!q.empty())
{
node t = q.top();
cout<<t.x <<' '<< t.y<<endl;
q.pop();
}
puts("-----自定义比较函数--------");
puts("队列:x从小到大输出");
cout<<endl;
while(!Q.empty())
{
int t = Q.top();
cout<<t<<endl;
Q.pop();
}
return 0;
}
STL 队列 、优先队列、栈 小结,布布扣,bubuko.com
原文地址:http://blog.csdn.net/wjw0130/article/details/35270593