当前位置: 首页 > news >正文

13.stack容器和queue容器

前言:

stack是栈容器,queue是队列容器,这两个容器使用上都比较简单,且结构相似,就放到一起讲。

参考网站:https://legacy.cplusplus.com/

目录

前言:

一、stack容器介绍

stack接口:

构造函数:

二、queue容器介绍

queue接口:

构造函数:

三、deque的简单介绍

总结:


一、stack容器介绍

stack实现了栈的结构,特点是先进后出,只有一端接口。

stack是一种容器适配器,所谓容器适配器即对其他的容器进行封装,然后提供一组接口来间接控制其元素。

stack封装的底层容器默认是deque(双端队列),不过vector,list这些容器也是符合要求的,但至少要支持这些操作:

  • empty
  • size
  • back
  • push_back
  • pop_back

stack接口:

和之前的vector、list这些比起来,stack提供的接口数量就很少了。

  • empty判断容器是否为空
  • size返回栈的数据个数
  • top返回栈顶元素
  • push负责入栈
  • pop负责出栈
  • swap用于交换数据

补充:

1. stack容器的pop接口没有返回值,所以如果需要反复取栈顶元素并出栈的话用不了pop的返回值,而只能先用top取栈顶元素,再pop出栈

2. 还重载了非成员函数swap,用于交换两个stack对象的值,用法:swap(stack1,stack2);

构造函数:

由于stack是容器适配器,所以不能直接用数据来进行初始化,而是需要传入一个容器对象,或者直接创建一个默认由deque实现的空对象。

不过stack支持用另一个容器的一段迭代器区间初始化。

实例代码:

	deque<int> mydeque(3, 100);          // 初始化3个数据的双端队列vector<int> myvector(2, 200);        // 初始化2个数据的顺序表stack<int> first;                    // 创建一个空stack对象stack<int> second(mydeque);		  // 用双端队列初始化stack对象stack<int, vector<int> > third;  // 指定使用vector作为适配器的底层容器stack<int, vector<int> > fourth(myvector);

二、queue容器介绍

queue实现了队列结构,特点是先进先出,有队头队尾两端接口。

queue也是一个容器适配器,默认底层容器是deque,底层容器至少需要满足这些操作:

  • empty
  • size
  • front
  • back
  • push_back
  • pop_front

queue接口:

queue的接口和stack极其相似:

  • empty判断容器是否为空
  • size返回队列的数据个数
  • top返回队顶元素
  • push负责队尾入队
  • pop负责队头出队
  • swap用于交换数据

queue的pop同样没有返回值,重载的非成员函数swap也同样可以交换queue对象。

构造函数:

构造方式也和stack类似:

	deque<int> mydeque(3, 100);          // 初始化3个数据的双端队列vector<int> myvector(2, 200);        // 初始化2个数据的顺序表queue<int> first;                    // 创建一个空queue对象queue<int> second(mydeque);		  // 用双端队列初始化queue对象queue<int, vector<int> > third;  // 指定使用vector作为适配器的底层容器queue<int, vector<int> > fourth(myvector);

三、deque的简单介绍

介绍stack和queue的时候都提到了deque,那也简单了解一下deque这个数据结构。

deque是双端队列,即可以头插头删,也可以尾插尾删,时间复杂度都是O(1),但不保证先进先出

deque的优势:

  • 支持随机访问(数组的优势)
  • 支持头插头删,且时间复杂度尾O(1)(链表的优势)
  • 不需要扩容,想用随时申请(链表的优势)
  • cpu告诉缓存命中率高

尽管deque结合了数组和链表的优势,但他还是不能取代替数组和链表,因为deque的几个优势都没有做到极致,更像是数组和链表结合的一个中和产物。

那我们来通过一张图看看deque是怎么实现的:

1. 所以deque其实就是申请多个数组,然后用链表的方式来管理这些数组

2. deque的迭代器比较复杂,由四个指针构成,_cur、_first、_last和_node,_cur表示当前具体的数据位置,_first表示buff数组的头,_last表示buff数组的尾,_node表示结点,即数组的位置

总结:

本文介绍了stack容器和queue容器的使用,还简单介绍了deque的结构。

如果觉得有帮助的话可以点赞收藏加关注支持一下!

http://www.dtcms.com/a/422823.html

相关文章:

  • 详解STL中stack_queue为什么选择deque作为默认容器
  • ubuntu下AstrBot +NapCat QQ机器人
  • 新天力:食品容器领域的领军先锋正式开启资本市场新征程
  • iOS 不上架怎么安装?多种应用分发方式解析,ipa 文件安装、企业签名、Ad Hoc 与 TestFlight 实战经验
  • 郑州网站运营沥林行业网站建设
  • 算法面试(6)------mAP 是什么?如何计算?P-R 曲线怎么看?
  • 企业网站推广可以选择哪些方法?系统定制
  • 深度学习--行人重识别技术(超分辨率网络+ResNet101)附数据集
  • CS50ai: week2 Uncertainty我的笔记B版——当 AI 开始“承认不确定”
  • 泉州网站建设开发怎么制作h5棋牌软件
  • 深入Spring Boot生态中最核心部分 数据库交互spring-boot-starter-data-jpa和Hibernate (指南五)
  • 如何使用Python实现UDP广播
  • ThinkPHP 入门:快速构建 PHP Web 应用的强大框架
  • 系统架构 从_WHAT_走向_HOW_的锻造之路
  • UNIX下C语言编程与实践6-Make 工具与 Makefile 编写:从基础语法到复杂项目构建实战
  • 事业单位网站模板网站开发png图标素材
  • 电子商务网站建设外包服务p2p理财网站开发框架
  • Gateway 集成 JWT 身份认证:微服务统一认证的实战指南
  • C语言数据类型与变量详解
  • 【开题答辩全过程】以 php厦门旅游信息网站管理系统开题为例,包含答辩的问题和答案
  • 《重构工业运维链路:三大AI工具让设备故障“秒定位、少误判”》
  • 大模型的第一性原理考量:基于物理本质与数学基础的范式重构
  • Ubuntu 系统安装 Prometheus+Grafana(附shell脚本一键部署↓)
  • Airbnb内部核心键值存储系统 Mussel 已完成从 v1 到 v2 的重构升级
  • 漳州做网站配博大钱少awordpress国内网站吗
  • 在用户调研中应用卡尔曼滤波:用动态思维重构认知更新
  • [免费]基于Python的在线音乐网站系统(后端Django)【论文+源码+SQL脚本】
  • 网站建设后期出现的问题手机网站开发前台架构
  • 首饰设计网站大全如何选择昆明网站建设
  • MapDistill:通过相机 - 激光雷达融合模型蒸馏提升高效基于相机的高清地图构建性能