c++的 stack 和 queue(deque) 和 priority_queue 和 适配器

news2024/9/20 5:31:53

目录

1.stack和queue

2. queue的介绍和使用

3. priority_queue的介绍和使用

4. 容器适配器

4.1 STL标准库中stack和queue的底层结构

4.2 deque的简单介绍(了解)

4.2.1 deque的原理介绍

4.2.2 deque的缺陷


1.stack和queue

1.1stack  的 结构

1.2 stack 的使用

可以自己查看 网站:

stack - C++ Reference


2. queue的介绍和使用

2.1. 队列是一种容器适配器,专门用于在FIFO上下文(先进先出)中操作,其中从容器一端插入元
素,另一端提取元素。

2.2 queue的使用

可以自己查看 网站:


queue - C++ Reference


3. priority_queue的介绍和使用

3.1priority_queue的介绍


优先级队列 默认使用vector 作为其底层存储数据的容器,在vector上又使用了堆算法将vector中
元素构造成堆的结构,因此priority_queue就是堆,所有需要用到堆的位置,都可以考虑使用
priority_queue。注意:默认情况下priority_queue是大堆。

3.2 priority_queue的使用

可以自己查看 网站:

priority_queue - C++ Reference


4. 容器适配器

        适配器是一种设计模式(设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结),该种模式是将一个类的接口转换成客户希望的另外一个接口

4.1 STL标准库中stack和queue的底层结构


虽然 stack和queue 中也可以存放元素,但在STL中并没有将其划分在容器的行列,而是将其称为
容器适配器
,这是因为stack和队列只是对其他容器的接口进行了包装,STL中stack和queue默认
使用deque

比如:


4.2 deque的简单介绍(了解就行)
 

4.2.1 deque的原理介绍


deque(双端队列):是一种双开口的"连续"空间的数据结构,双开口的含义是:可以在头尾两端
进行插入和删除操作
,且时间复杂度为O(1),与vector比较,头插效率高,不需要搬移元素;与
list比较,空间利用率比较高。


注意:deque并不是真正连续的空间,而是由一段段连续的小空间拼接而成的,实际deque类似于一个动态的二维数组


4.2.2 deque的缺陷
 

1.deque有一个致命缺陷:不适合遍历,因为在遍历时,deque的迭代器要 频繁的去检测其
是否移动到某段小空间的边界,导致效率低下,

 

2.序列式场景中,可能需要经常遍历,因此在实际中,需要线性结构时,大多数情况下优先考虑vector和list,deque的应用并不多,而目前能看到的一个应用就是,STL用其作为stack和queue的底层数据结构。

3.为什么选择deque作为stack和queue的底层默认容器

3.1. stack和queue不需要遍历 (因此stack和queue没有迭代器),只需要在固定的一端或者两端进
行操作。


3.2. 在stack中元素增长时,deque比vector的效率高(扩容时不需要搬移大量数据);queue中的
元素增长时,deque不仅效率高,而且内存使用率高。结合了deque的优点,而完美的避开了其缺陷
 


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

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

相关文章

学习Vue3的第四天

目录 pinia 安装 Pinia 存储读取数据 修改数据(三种方式) storeToRefs getters $subscribe store组合式写法 组件通信 props 自定义事件 mitt v-model $attrs $refs、$parent provide、inject slot pinia Pinia 是一个用于 Vue.js 的状态管理库,作…

为工程师构建生成式 AI 应用程序

作为全栈工程师,我们经常需要将后端和前端代码与 AI 模型集成。然而,访问这些模型一直是一项重大挑战。主要障碍之一是缺乏对开放和封闭模型的轻松访问。在 GitHub,我们正在打破访问障碍并推出GitHub Models。让您(开发人员&#…

微服务网关终极进化:设计模式驱动的性能与可用性优化(四)

时间:2024年09月12日 作者:小蒋聊技术 邮箱:wei_wei10163.com 微信:wei_wei10 希望大家帮个忙!如果大家有工作机会,希望帮小蒋推荐一下,小蒋希望遇到一个认真做事的团队,一起努力…

信息安全数学基础(7)最小公倍数

前言 在信息安全数学基础中,最小公倍数(Least Common Multiple, LCM)是一个重要的概念,它经常与最大公约数(Greatest Common Divisor, GCD)一起出现,两者在数论、密码学、模运算等领域都有广泛的…

docker-compose 部署 flink

下载 flink 镜像 [rootlocalhost ~]# docker pull flink Using default tag: latest latest: Pulling from library/flink 762bedf4b1b7: Pull complete 95f9bd9906fa: Pull complete a880dee0d8e9: Pull complete 8c5deab9cbd6: Pull complete 56c142282fae: Pull comple…

黑龙江等保测评:保障数据安全的最佳选择,助力企业无忧发展!

在数字化时代,数据安全已成为企业发展的重中之重。尤其是在黑龙江,随着信息技术的快速发展,数据泄露和网络攻击的风险日益增加。为了帮助企业提升数据安全防护能力,黑龙江等保测评应运而生,成为保障数据安全的有力工具…

DRW的公式推导及代码解析

流程 分阶段指定β值 # 根据当前epoch计算使用的beta值idx epoch // 160 # 每160轮epoch切换一次加权系数betas [0, 0.9999] # 两个beta值beta betas[idx] # 根据idx选择beta值 计算有效样本的权重 对权重进行归一化 (每类权重值 / 权重总和)* …

第7篇:【系统分析师】计算机网络

考点汇总 考点详情 1网络模型和协议:OSI/RM七层模型,网络标准和协议,TCP/IP协议族,端口 七层:应用层,表示层,会话层,传输层,网络层,数据链路层,…

MBD_入门篇_23_SimulinkSinks

23.1 概述 Sink库里面是Simulink的显示或导出信号数据的模块,可以理解为信号的最后接收的模块,要么用于显示要么用于传递给更上层的系统要么终止。 Sink库里面的模块都只有输入,没有输出。 23.2 回顾常用模块 23.2.1 Display 用于实时仿真…

终端文件管理神器 !!!【送源码】

项目简介 nnn是一款专为命令行爱好者打造的高效终端文件管理器。它以其超小的体积、几乎零配置的要求以及卓越的速度表现而著称。nnn不仅适用于Linux、macOS、BSD等操作系统,还能够在诸如树莓派、Android上的Termux、WSL、Cygwin等多个平台运行。它遵循POSIX标准&am…

EPSG 标识符和Web墨卡托投影的关系

Web 墨卡托投影使用修改版的墨卡托投影,并已成为 Web 制图的默认地图投影。此投影的主要区别在于它在所有尺度上都使用球面公式。而墨卡托投影使用与赤道相切的垂直圆柱投影。以下是 Web 墨卡托投影成为 Web 和在线制图事实上的标准的一些原因。 哪些 Web 地图使用 Web Merca…

从 Data 到 Data + AI,必然之路还是盲目跟风?

从 Data 到 Data AI,必然之路还是盲目跟风? 前言从 Data 到 Data AI 前言 数据和人工智能的发展日新月异,深刻地改变着我们的生活和工作方式。数据平台作为数据处理和分析的核心基础设施,也在不断演进和发展。从数据库时代到大…

Linux系统使用Docker安装DockerUI并实现远程管理本地容器无需公网IP

文章目录 前言1. 安装部署DockerUI2. 安装cpolar内网穿透3. 配置DockerUI公网访问地址4. 公网远程访问DockerUI5. 固定DockerUI公网地址 前言 DockerUI是一个docker容器镜像的可视化图形化管理工具。DockerUI可以用来轻松构建、管理和维护docker环境。它是完全开源且免费的。基…

如何用MATLAB搭建ResNet网络(复现论文)

文章目录 前言基础工具网络搭建ResNet网络代码完整代码总结参考文献 前言 之前暑假实习了3个月,后来又赶上开学一堆事,现在终于有时间记录一下学习经历。新的学期开始了,要继续努力。 因为最近要做一个无人机航迹分类的项目,所以…

一周完成计算机毕业设计论文:高效写作技巧与方法(纯干货/总结与提炼)

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

Trie字符串统计(每周一类)

这节课我们学习Trie字符串。这个算法的主要应用就是字符串的快速存储和查找。我们通过下面这个题来讲 Tire字符串统计 ,另外说个题外话,本人是从ACwing里学习的算法知识,希望大家支持一下y总(ACwing大佬),如果觉得我这里的知识讲得…

Unity Apple Vision Pro 开发(十):通过图像识别锚定空间

XR 开发者社区链接: SpatialXR社区:完整课程、项目下载、项目孵化宣发、答疑、投融资、专属圈子 课程试看:https://www.bilibili.com/video/BV1mpH9eVErW 课程完整版,答疑仅社区成员可见,可以通过文章开头的链接加入…

另类动态规划

前言&#xff1a;一开始我根本想不到这个题目是一个动态规划的题目&#xff0c;而且我一开始的初始状态还写错了 我还忘记了写算法题的基本步骤&#xff0c;先看数据范围&#xff0c;再考虑能不能用动态规划写 题目地址 #include <bits/stdc.h> using namespace std; #de…

RTR_Chapter_4_上半部分

第四章 Transform 变换 变换&#xff08;transform&#xff09;是指以点、向量、颜色等实体作为输入&#xff0c;并以某种方式对其进行转换的一种操作。对于计算机图形学从业者而言&#xff0c;熟练掌握变换相关的知识是非常重要的。通过各种变换操作可以对物体、光源和相机进…

开源网安斩获CCIA中国网络安全创新创业大赛总决赛三等奖

近日&#xff0c;由中央网信办指导&#xff0c;中国网络安全产业联盟&#xff08;CCIA&#xff09;主办的2024年中国网络安全创新创业大赛总决赛及颁奖典礼在国家网络安全宣传周落下帷幕。开源网安“AI代码审核平台CodeSec V4.0” 凭借在AI方向的技术创新、技术突破及功能应用创…