手写队列以及stl中队列的使用
一,手写队列。
1 struct queue 2 { 3 int maxn=10000000; 4 int first=0,rear=0,a[maxn]; 5 6 void push(int x) 7 { 8 a[++rear]=x; 9 } 10 void pop() 11 { 12 first++; 13 } 14 int front() 15 { 16 return a[first]; 17 } 18 int empty() 19 { 20 return first>rear?0:1; 21 } 22 }q;
如图所示,是我的手写队列。
二,stl中普通队列的使用。
1,基本操作
1 push(x) 2 将x压入队列的末端 3 4 pop() 5 弹出队列的第一个元素(队顶元素),注意此函数并不返回任何值 6 7 front() 8 返回第一个元素(队顶元素) 9 10 back() 11 返回最后被压入的元素(队尾元素) 12 13 empty() 14 当队列为空时,返回true 15 16 size() 17 返回队列的长度
2,使用方法
#include <queue>
3,声明方法
①普通说明
1 queue<int>q;
②结构体说明
1 struct node 2 { 3 int x, y; 4 }; 5 queue<node>q;
三,stl中优先队列的使用方法
1,优先队列的介绍。优先队列的出队并不根据入队的先后顺序,而是根据队内元素的优先权顺序的大小(或者自己算子来计算进行的排序)
同时优先队列(priority_queue),有三个模板类参数,元素类型,容器类型,比较算子。默认的容器为vector,默认比较算子为less,即小在前,大在后。这块我有点不懂。反正大的优先出队。
抄原话为(“……默认算子为less,即小的往前排,大的往后排(出队时序列尾的元素出队)……”
2,定义优先队列的对象的示例代码如下
1 priority_queue<int >q1; 2 3 priority_queue<pair<int,int> >q2; 4 5 priority_queue<int,vector<int>,greater<int> >q3;//定义小的先出队
3,其操作与queue基本相同。
4,关于比较算字的应用。
四,另外解释
C++队列的成员函数: back()返回最后一个元素 empty()如果队列空则返回真 front()返回第一个元素 pop()删除第一个元素 push()在末尾加入一个元素 size()返回队列中元素的个数 头文件: #include <queue> 声明: 1、 queue<int> q; 2. struct point { int x; int y; }; queue<point> que; 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 pair类型: 一般当一个对象有多个属性的时候,我们会用结构体stuct写多个属性,而当只有两个属性的时候,就可以使用pair. 使用方法: pair<type,type> name; 1 比如: pair<int,int> P; //对象P有两个属性,都是int类型 1 而且,这里类型一般不做限制,所以自己定义的类型一样可以使用。 访问方法: pair类型有两个属性值,一个first,一个second int x=P.first; //访问P的第一个属性值 int y=P.second; //访问P的第二个属性值 1 2 如果需要定义多个pair类型,可以使用typedef,例子如下: typedef pair<int,int>P; P ac(1,0); P bc(0,0);
五,以上都是网上的东西
1,我来一些感性的认识,队列简单说,就像自己从屏幕输入的那些东西。当你死机时候乱点其实都是记录上的。
2,另外之前队列和结构体之间似乎搞错了一些东西,队列之所以是队列,是和平常定义结构体不一样的。