STL教程(七):C++ STL常用容器之 queue
上一篇文章介绍了先进后出的stack容器,对应着先进后出还有一种先进先出的容器叫queue容器 。
1、queue容器的基本概念
Queue是一种先进先出(First In First Out,FIFO)的数据结构,它有两个出口,queue容器允许从一端新增元素,从另一端移除元素。
2、queue容器的特点
Queue所有元素的进出都必须符合”先进先出”的条件,只有queue的顶端元素,才有机会被外界取用。
Queue不提供遍历功能,也不提供迭代器。
3、queue常用API介绍
3.1queue构造函数
queue<T> queT;//queue采用模板类实现,queue对象的默认构造形式: queue(const queue &que);//拷贝构造函数
3.2queue存取、插入和删除操作
push(elem);//往队尾添加元素 pop();//从队头移除第一个元素 back();//返回最后一个元素 front();//返回第一个元素
3.3queue赋值操作
queue& operator=(const queue &que);//重载等号操作符
3.4queue大小操作
empty();//判断队列是否为空 size();//返回队列的大小
案例:
#include<iostream>#include <queue> //队列模板
using namespace std;void test(){
queue<int> q;
q.push(10);
q.push(20);
q.push(30);
q.push(40);
q.push(50);
if(q.empty())
{
cout<<"空队"<<endl;
}
else
{
cout<<"队的元素个数:"<<q.size()<<endl;
while(!q.empty())//队不为空 我就访问队头元素
{
cout<<q.front()<<" ";
q.pop();//出队 一个数据
}
}
}int main() {
test() ;
return 0;}
4、优先队列priority_queue
在头文件中,还定义了一个非常有用的模版类priority_queue(优先队列),优先队列与队列的差别在于优先队列不是按照入队的顺序出队,而是按照队列中元素的优先权顺序出队(默认为大者优先,也可以通过指定算子来指定自己的优先顺序)。
priority_queue模版类有三个模版参数,元素类型,容器类型,比较算子。其中后两个都可以省略,默认容器为vector,默认算子为less,即小的往前排,大的往后排(出队时序列尾的元素出队)。
定义方式:
priority_queue<int >q1;//优先队列 默认大的先出队
priority_queue<pair<int,int> >q2;
priority_queue<int,vector<int>,greater<int> >q3;//定义小的先出队
案例:给定几个坐标(x,y,z),按照优先输出z坐标大的。
#include<iostream>
#include<queue>
#include<stdlib.h>
using namespace std;
class T
{
public:
int x,y,z;
T(int a,int b,int c):x(a),y(b),z(c)
{
}
};
bool operator<(const T&t1,const T&t2)
{
return t1.z<t2.z;
}
int main(void)
{
priority_queue<T>q;
q.push(T(4,4,3));
q.push(T(2,2,5));
q.push(T(1,5,4));
q.push(T(3,3,6));
while(!q.empty())
{
T t=q.top();
q.pop();
cout<<t.x<<" "<<t.y<<" "<<t.z<<endl;
}
system("Pause");
return 1;
}
更多关于智能物联网培训的问题,欢迎咨询千锋教育在线名师。千锋教育拥有多年IT培训服务经验,采用全程面授高品质、高体验培养模式,拥有国内一体化教学管理及学员服务,助力更多学员实现高薪梦想。