STL源码剖析 queue队列概述

  • queue是一种先进先出的数据结构,他有两个出口
  • 允许新增元素(从最底端 加入元素)、移除元素(从最顶端删除元素),除了对于顶端和底端元素进行操作之外,没有办法可以获取queue的其他元素
  • 即queue没有遍历行为

 基于deque的queue

  • 针对deque进行操作,封闭其底部的出口 和 前端的入口
  • queue不被归类为容器,而被归类为容器适配器
//定义在stl_config.h文件中
//但是没有找到 具体详情参见 参考链接
# ifdef __STL_EXPLICIT_FUNCTION_TMPL_ARGS
# define __STL_NULL_TMPL_ARGS <>
# else
# define __STL_NULL_TMPL_ARGS
# endiftemplate <class T,class Sequence = std::deque<T>>
class queue{//__STL_NULL_TMPL_ARGS会展开为 <>friend bool operator== __STL_NULL_TMPL_ARGS(const queue& x,const queue& y);friend bool operator< __STL_NULL_TMPL_ARGS(const queue& x,const queue& y);
public:typedef typename Sequence::value_type value_type;typedef typename Sequence::size_type size_type;typedef typename Sequence::reference reference;typedef typename Sequence::const_reference const_reference;
protected://底层容器Sequence c;
public://以下完全使用Sequence c的操作,完成stack的操作bool empty() const {return c.empty();}size_type size() const {return c.size();}reference front() {return c.back();}const_reference front() const {return c.front();}reference back() const {return c.back();}const_reference back() {return c.back();}//deque 是两头可以进出,queue 是末端进,前端出 (所以先进者先出)void push(const value_type& x){ c.push_back(x);}void pop(){return c.pop_front();}
};template <class T,class Sequence>
bool operator==(const queue<T,Sequence>&x,const queue<T,Sequence>&y){return x.c == y.c;
}template <class T,class Sequence>
bool operator<(const queue<T,Sequence>&x,const queue<T,Sequence>&y){return x.c < y.c;
}

queue没有迭代器

  • 考虑到只有queue需要满足先进先出的条件,只有顶端的元素才有机会被外界取用,因此 queue不需要提供遍历元素的迭代器

基于list的queue

  • queue需要的函数如 empty、size()、back、push_back、pop_back是链表也支持的
  • 使用范例
#include <list>
#include <queue>int main()
{std::queue<int,std::list<int>>list_queue;list_queue.push(1);list_queue.push(3);list_queue.push(5);list_queue.push(7);std::cout << list_queue.size() << std::endl;  //4std::cout << list_queue.front() << std::endl; //1list_queue.pop();std::cout << list_queue.front() << std::endl; //3list_queue.pop();std::cout << list_queue.front() << std::endl; //5list_queue.pop();std::cout << list_queue.front() << std::endl; //7std::cout << list_queue.size() << std::endl;  //1
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/446263.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java输入正数和负数并计算个数

题目 从键盘读入个数不确定的整数&#xff0c;并判断读入的正数和负数的个数&#xff0c;输入 为0时结束程序。 知识点 最简单“无限” 循环格式&#xff1a;while(true) , for(;;),无限循环存在的原因是并不 知道循环多少次&#xff0c;需要根据循环体内部某些条件&#xf…

python为什么运行不了_python为什么会环境变量设置不成功

学习python编程&#xff0c;首先要配置好环境变量。本文主要讲解python的环境变量配置&#xff0c;在不同版本下如何安装 Windows 打开Python官方下载网站 x86:表示是32位电脑 x86-64:表示是64位电脑 目前Python版本分为2.x版本和3.x版本。推荐大家使用3.x版本。 设置环境变量&…

STL 源码剖析 heap堆

heap不属于STL容器的组件&#xff0c;属于幕后角色&#xff0c;是priority_queue的助手priority_queue 允许用户以任何次序将任何元素推入容器内&#xff0c;但是取出的时候需要从优先级最高(也就是数值最高)的元素开始取&#xff0c;这种思想是基于heap的函数实现如果使用list…

java 打印星号

代码1 package lesson.l2_for; //6列4行 //****** //****** //****** //****** public class ForDemo8 {public static void main(String[] args) {for (int i1;i<4;i){for (int j 1; j <6 ; j) {System.out.print("*");}System.out.println();}} }代码2 pa…

python从小白到大牛百度云盘_Java从小白到大牛 (关东升著) 中文pdf+mobi版[36MB]

《Java从小白到大牛》是一本Java语言学习立体教程&#xff0c;读者群是零基础小白&#xff0c;通过本书的学习能够成为Java大牛。主要内容包括&#xff1a;Java语法基础、Java编码规范、数据类型、运算符、控制语句、数组、字符串、面向对象基础、继承与多态、抽象类与接口、枚…

java打印九九乘法表

代码1 package lesson.l5_loop; //九九乘法表 //1*11 //2*12 2*24 //3*13 3*26 3*39 //4*14 4*28 4*312 4*416 //5*15 5*210 5*315 5*420 5*525 //6*16 6*212 6*318 6*424 6*530 6*636 //7*17 7*214 7*321 7*428 7*535 7*642 7*749 //8*18 8*216 8*324 8*432 8*540 8*648 8*75…

STL源码剖析 priority_queue

priority_queue是一个拥有权重概念的queue&#xff0c;允许底部加入新的元素&#xff0c;头部删除旧的元素&#xff0c;以及审视元素数值的操作priority_queue带有权重的概念&#xff0c;即元素按照权重进行排列&#xff0c;而不是按照插入队列的顺序进行排序。要求权值高者在前…

python数字1 3怎么表示_Python入门篇之数字

数字类型 数字提供了标量贮存和直接访问。它是不可更改类型&#xff0c;也就是说变更数字的值会生成新的对象。当然&#xff0c;这个过程无论对程序员还是对用户都是透明的&#xff0c;并不会影响软件的开发方式。 Python 支持多种数字类型&#xff1a;整型、长整型、布尔型、双…

java 打印100以内的质数

题目 质数&#xff1a;只能被1和它本身所整除的数。即&#xff1a;从2开始一直到这个数-1&#xff0c;都不能被这个数整除&#xff1b;最小的质数是2 知识点 1.System.currentTimeMillis():计算当前时间距离1970-1-1的毫秒数&#xff0c;返回long 2.Math.sqrt&#xff1a;开…

STL源码剖析 slist单向链表概述

概述 SGI STL的list是一个双向链表&#xff0c;单向链表是slist&#xff0c;其不在标准规格之内单向和双向链表的区别在于&#xff0c;单向链表的迭代器是单向的 Forward Iterator&#xff0c;双向链表的迭代器属于双向的Bidirectional Iterator。因此很多功能都被受限但是单向…

output怎么用_用树莓派实现室内温度监控

树莓派加上温度传感器实现室内温度监控。可用于家庭&#xff0c;轿车&#xff0c;工业&#xff0c;农业 等许多方面。可做温度预警&#xff0c;自动降温等操作。各位小伙伴可自行脑补发挥。1.硬件准备a.树莓派&#xff08;Raspberry Pi&#xff09;一个b.DS18B20温度传感器一个…

java 家庭收支账户

代码1 package lesson.project.p1_familyAccount;import java.util.Scanner;public class FamilyAccount {public static int money 10000;public static String all "";public static void main(String[] args) {Scanner scanner new Scanner(System.in);while …

【Android 13】使用Android Studio调试系统应用之Settings移植(四):40+个依赖子模块之ActionBarShadow

文章目录 一、篇头二、系列文章2.1 Android 13 系列文章2.2 Android 9 系列文章2.3 Android 11 系列文章三、子模块AS移植3.1 AS创建目标3.2 创建ActionBarShadow(1)使用VS Code打开org_settings/SettingsLib目录(2)ActionBarShadow的Manifest.xml(3)ActionBarShadow的An…

STL源码剖析 关联式容器

STL关联式容器以set(集合) 和 map(映射表)两大类&#xff0c;以及对应的衍生体构成,比如mulyiset(多键集合) multimap(多键映射表) ,容器的底层均基于红黑树RB-Tree也是一个独立的容器&#xff0c;但是不对外开放此外还提供了标准之外的关联式容器 hash table散列表&#xff0c…

python求小于n的所有素数_用python求出2000000内所有素数的和?不知怎么写?

展开全部 import itertools import time N 2000000 L range(N) def findnxt(s): flag 0 for n in itertools.ifilter(None, L[s1:]): return n t0 time.time() n 2 X int(N ** .5) while n < X: for i, x in enumerate(L[::n][1:]): if i0: continue L[x] 0 n findn…

STL源码剖析 关联式容器 红黑树

概念 红黑树不仅仅是一个二叉树&#xff0c;必须满足如下条件1&#xff0c;每个节点不是红色就是黑色 (深色底纹为黑色&#xff0c;浅色底纹为红色)2&#xff0c;根节点是黑色的3&#xff0c;如果节点为红&#xff0c;其子节点必须为黑色的4&#xff0c;任一节点至NULL(树的尾…

java蓝桥杯 试题-基础练习-数列排序

试题-基础练习-数列排序 题目 问题描述   给定一个长度为n的数列&#xff0c;将这个数列按从小到大的顺序排列。1<n<200 输入格式   第一行为一个整数n。   第二行包含n个整数&#xff0c;为待排序的数&#xff0c;每个整数的绝对值小于10000。 输出格式   输出…

python生成的词云没有图案_还在为专栏封面发愁?我用Python写了个词云生成器!...

妈妈再也不用担心我写专栏找不到合适的封面了&#xff01;B站专栏的封面至少是我一直头疼的问题&#xff0c;每次写完文章却找不到合适的图片作为封面。 词云是一个很不错的选择&#xff0c;既美观&#xff0c;又提纲挈领。网上也有词云生成的工具&#xff0c;但大多收费/只能试…

java 1000以内的完数

题目 代码 package lesson.l6_review;public class PrefectNumber {public static void main(String[] args) {for (int i 1; i <1000 ; i) {int num0;for (int j 1; j <i-1 ; j) {if (i%j0){numj;}}if (inum){System.out.print(i"\t");}}} }

STL源码剖析 set集合

set的特性是 所有的元素会按照键值自动排序set 的键值等同于实值set不允许涵盖两个相同的键值不可以通过迭代器修改set的元素数值&#xff0c;这会破坏元素的排列顺序。因此set<T>::iterator 被定义为底层RB-tree的const_iterator,杜绝写入。也就是set的iterators是一种c…