《算法笔记》学习笔记

queue 常见用法详解

queue翻译为队列,在STL中主要则是实现了一个先进先出的容器。

1. queue 的定义

//要使用queue,应先添加头文件#include <queue>,并在头文件下面加上"using namespace std;",即可使用。
//定义写法
queue< typename > name;
//typename 可以是任意基本数据类型或容器

2. queue容器内元素的访问

//由于队列(queue)本身就是一种先进先出的限制性数据结构,因此在STL中只能通过
//front()来访问队首元素,或是通过back()来访问队尾元素
#include <stdio.h>
#include <queue>
using namespace std;
int main() {
queue<int> q;
for(int i = 1; i <= 5; i++) {
q.push(i); //push(i)用以将i压入队列,因此依次入队 1 2 3 4 5
}
printf("%d %d\n", q.front(), q.back()); //输出结果是1 5
return 0;
}

3.queue实用函数实例解析

(1) push()

//push(x)将x进行入队,时间复杂度为O(1),实例见"queue"容器内元素的访问。

(2) front(), back()

//front()和back()可以分别获得队首元素和队尾元素,时间复杂度为O(1),实例见"queue"容器内元素的访问。
//使用front()前,必须用empty()判断队列是否为空

(3) pop()

//pop()令队首元素出队,时间复杂度为O(1)
//使用pop()前,必须用empty()判断队列是否为空
#include <stdio.h>
#include <queue>
using namespace std;
int main() {
queue<int> q;
for(int i = 1; i <= 5; i++) {
q.push(i); //依次入队1 2 3 4 5
}
for(int i = 1; i <= 3; i++) {
q.pop(); //出队首元素三次(即依次出队1 2 3)
}
printf("%d\n", q.front()));
return 0;
}

(4) empty()

//empty()检测queue是否为空,返回true则空,返回false则非空。时间复杂度为O(1)
#include <stdio.h>
#include <queue>
using namespace std;
int main() {
queue<int> q;
if(q.empty() == true) { //一开始队列内没有元素,所以是空
printf("Empty\n");
} else {
printf("Not Empty\n");
}
q.push(1);
if(q.empty() == true) { //在入队"1"后,队列非空
printf("Empty\n");
} else {
printf("Not Empty\n");
}
return 0;
}

(5) size()

//size()返回queue内元素的个数,时间复杂度为O(1)
#include <stdio.h>
#include <queue>
using namespace std;
int main() {
queue<int> q;
for(int i = 1; i <= 5; i++) {
q.push(i); //push(i)用以将i压入队列
}
printf("%d\n", q.size()); //队列中有5个元素
return 0;
}

4. queue的常见用途

  • 需要实现广度优先搜索时,可以不用自己手动实现一个队列,而是用queue作为替代。

STL queue 常见用法详解的更多相关文章

  1. C++标准模板库(STL)——queue常见用法详解

    queue的定义 queue<typename> name; queue容器内元素的访问 由于队列本身就是一种先进先出的限制性数据结构,因此在STL中只能通过front()来访问队首元素, ...

  2. STL priority_queue 常见用法详解

    <算法笔记>学习笔记 priority_queue 常见用法详解 //priority_queue又称优先队列,其底层时用堆来实现的. //在优先队列中,队首元素一定是当前队列中优先级最高 ...

  3. STL stack 常见用法详解

    <算法笔记>学习笔记 stack 常见用法详解 stack翻译为栈,是STL中实现的一个后进先出的容器.' 1.stack的定义 //要使用stack,应先添加头文件#include &l ...

  4. STL map 常见用法详解

    <算法笔记>学习笔记 map 常见用法详解 map翻译为映射,也是常用的STL容器 map可以将任何基本类型(包括STL容器)映射到任何基本类型(包括STL容器) 1. map 的定义 / ...

  5. STL set 常见用法详解

    <算法笔记>学习笔记 set 常见用法详解 set是一个内部自动有序且不含重复元素的容器 1. set 的定义 //单独定义一个set set<typename> name: ...

  6. STL vector常见用法详解

    <算法笔记>中摘取 vector常见用法详解 1. vector的定义 vector<typename> name; //typename可以是任何基本类型,例如int, do ...

  7. STL pair 常见用法详解

    <算法笔记>学习笔记 pair 常见用法详解 //pair是一个很实用的"小玩意",当想要将两个元素绑在一起作为一个合成元素, //又不想因此定义结构体时,使用pair ...

  8. STL string 常见用法详解

    string 常见用法详解 1. string 的定义 //定义string的方式跟基本数据类型相同,只需要在string后跟上变量名即可 string str; //如果要初始化,可以直接给stri ...

  9. C++标准模板库(STL)——set常见用法详解

    set的定义 set<typename> name; typename可以是任何基本类型,如int.double.char.结构体等,也可以是STL标准容器,如vector.set.que ...

随机推荐

  1. ros中同时订阅两个topic(2张图像)合并成一个topic(1张图像)

    2019-12-06 15:42:39 先暂时做个资料保存 要同时用两个红外相机,但是没有做硬件上的 时间戳同步,就是笔记本上同时插着两个相机. 两个topic发布各自相机的图像,然后要有个节点同时订 ...

  2. Zabbix 数据库迁移

    背景:ZABBIX的环境是LNMP,MySQL的架构是M-M主备模式,单台服务器SSD硬盘800G.监控主机日渐增多,空间不足,迁移到同样架构下的SAS盘2T空间. 架构:A 192.168.0.10 ...

  3. CSS简单选择器的学习笔记

    我们知道通过CSS定义页面样式的时候要用到各种各样的选择器,正确的使用选择器是我们能够正确使用CSS做页面样式的基础.下面是我学习选择器的一个简易笔记,举一些简单的例子. 为了方便展示,我选择在内部的 ...

  4. HTML语义化是什么?为什么要语义化?

    HTML语义化HTML的语义化总结为: 用最恰当的标签来标记内容. 该如何理解呢?比如需要加入一个标题,这个标题的字体比正文的要大写,还要加粗.能够实现这种效果的方法有很多,比如用CSS样式进行渲染. ...

  5. Redis 4.x RCE 复现学习

    攻击场景: 能够访问远程redis的端口(直接访问或者SSRF) 对redis服务器可以访问到的另一台服务器有控制权 实际上就是通过主从特性来 同步传输数据,同时利用模块加载来加载恶意的用来进行命令执 ...

  6. SRS之SrsTsContext::encode_pes详解

    1. SrsTsContext::encode_pes 该函数位于 srs_kernel_ts.cpp 中.下面的分析基于假设当前要封装的消息是视频. /* * @msg: 要写入到 ts 文件中的音 ...

  7. LeetCode 最长公共前缀(探索字节跳动)

    题目描述 编写一个函数来查找字符串数组中的最长公共前缀. 如果不存在公共前缀,返回空字符串 "". 示例 1: 输入: ["flower","flow ...

  8. Redis调试 Centos

    https://zhuanlan.zhihu.com/p/67205845 https://www.cxc233.com/blog/e1d54234.html

  9. [Spark] Spark 3.0 Accelerator Aware Scheduling - GPU

    Ref: Spark3.0 preview预览版尝试GPU调用(本地模式不支持GPU) 预览版本:https://archive.apache.org/dist/spark/spark-3.0.0-p ...

  10. CentOS7或CentOS8 安装VirtualBox Guest Addon缺少kernel-headers的解决办法

    CentOS7或CentOS8 在Oracle VM VirtualBox中安装Guest Addon时,如果缺少kernel-headers和相应的编译库,会提示出错. "kernel h ...