千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > STL教程(七):C++ STL常用容器之 queue

STL教程(七):C++ STL常用容器之 queue

来源:千锋教育
发布人:syq
时间: 2022-06-22 16:26:04 1655886364

  上一篇文章介绍了先进后出的stack容器,对应着先进后出还有一种先进先出的容器叫queue容器 。

  1、queue容器的基本概念

  Queue是一种先进先出(First In First Out,FIFO)的数据结构,它有两个出口,queue容器允许从一端新增元素,从另一端移除元素。

1

  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;}

2

  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;

 

}

3

  更多关于智能物联网培训的问题,欢迎咨询千锋教育在线名师。千锋教育拥有多年IT培训服务经验,采用全程面授高品质、高体验培养模式,拥有国内一体化教学管理及学员服务,助力更多学员实现高薪梦想。

tags:
声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT