C++栈和队列(stack,queue,priority_queue)

时间:2021-12-26 14:41:30

C++如何使用栈和队列 

用STL就十分方便了比如栈:

#include<stack>//定义栈所需的头文件
using namespace std;
stack<int> s;//定义一个元素为int型的栈
int a=10;
s.push(a);//将a入栈
s.pop();//出栈一个元素
s.empty();//返回栈是否为空
s.size();//返回栈的大小
s.top();//返回栈顶元素

队列也是一样:

调用的时候要有头文件: #include<stdlib.h> 或 #include<cstdlib> +#include<queue>

Queue以先进先出的结构

#include<queue>//定义队列所需的头文件
using namespace std;
queue<int> s;//定义一个元素为int型的栈
int a=10;
q.push(a);//将a队尾插入一个元素
q.pop();//删除队头的元素
q.empty();//返回队列是否为空,是的话返回1,不是返回0
q.size();//返回队列的大小
a=q.front();//返回队首元素
a=q.back();//返回队尾元素
C++的queue类中priority_queue的用法与功能

priority_queue是很有用的的一个容器,你可以定义以什么为优先。所以你可以定义方法,也

就是一个函数类对象,C++中有一个<fanction>里面定义了一些方法 如:

less<class T> 这是按值大的优先 

greater<class T> 这是按值小的优先


priority_queue<class T, class comp=less< class T>> 默认的是以大为先,

方法有push() ,pop(),,empty(),top()等等。

例子:

#include <iostream>
#include <queue>//有priority_queue
using namespace std;
int main(){
priority_queue<int> q;
int a;
while(cin>>a){
q.push(a);
}
while(!q.empty()){
cout<<q.front()<<endl;
q.pop();
}
return 1;
}


 

输入:3 4 6 1 10 2 45 ctrl+z ( ctrl+z是输入结束标志)

输出:
45
10
6
4
3
2
1

自定义方法重载,排序从大到小,即队首值为最小

 

friend bool operator<<(obj const& lhs, obj const& rhs);

operator是重载的意思,所谓运算符重载,就是对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。 自定义类的赋值运算符重载函数的作用与内置赋值运算符的作用类似,但是要要注意的是,它与拷贝构造函数与析构函数一样,要注意深拷贝浅拷贝的问题,在没有深拷贝浅拷贝的情况下,如果没有指定默认的赋值运算符重载函数,那么系统将会自动提供一个赋值运算符重载函数。

struct node  
{
int x,y;
int time;
friend bool operator < (const node &a,const node &b) //时间小的先出队
{
return a.time>b.time;
}
};


priority_queue<Type,containner,functional> array[]形式其中Type为数据类型,可以自己定义,container为容器,一般的写法为vector<type>,function为比较形式,具体应用

http://blog.csdn.net/weiguang_123/article/details/6842867