全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

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

发布时间:2022-06-22 16:26:04
发布人:syq

  上一篇文章介绍了先进后出的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培训服务经验,采用全程面授高品质、高体验培养模式,拥有国内一体化教学管理及学员服务,助力更多学员实现高薪梦想。

相关文章

互联网公司的敏捷开发流程是怎么样?

互联网公司的敏捷开发流程是怎么样?

2023-10-14
max和maya有什么区别?

max和maya有什么区别?

2023-10-14
IT系统为什么需要可观测性?

IT系统为什么需要可观测性?

2023-10-14
C语言中的初始化是什么意思?

C语言中的初始化是什么意思?

2023-10-14

最新文章

常见网络安全面试题:Windows常用的命令有哪些?

常见网络安全面试题:Windows常用的命令有哪些?

2023-10-09
常见网络安全面试题:根据设备告警如何展开排查?

常见网络安全面试题:根据设备告警如何展开排查?

2023-10-09
常见网络安全面试题:mysql加固呢?(数据库加固)

常见网络安全面试题:mysql加固呢?(数据库加固)

2023-10-09
常见网络安全面试题:windows和linux加固?(操作系统加固)

常见网络安全面试题:windows和linux加固?(操作系统加固)

2023-10-09
在线咨询 免费试学 教程领取