你知道C++多少——栈和队列

🌈个人主页:小新_-

🎈个人座右铭:“成功者不是从不失败的人,而是从不放弃的人!”🎈

🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝

🏆所属专栏:话说那些与C++的爱恨情仇   欢迎订阅,持续更新中~~~

           

                                    ✨让小新带着你快乐的学习吧~✨

目录

1. stack的介绍和使用

1.1 stack的介绍

stack的文档介绍
翻译 :
1. stack 是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行
元素的插入与提取操作。
2. stack 是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定
的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部 ( 即栈顶 ) 被压入和弹出。
3. stack 的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类,这些容器类应该支持以下
操作:
empty :判空操作
back :获取尾部元素操作
push_back :尾部插入元素操作
pop_back :尾部删除元素操作
4. 标准容器 vector deque list 均符合这些需求,默认情况下,如果没有为 stack 指定特定的底层容器, 默认情况下使用deque

1.2 stack的使用

1.3 stack的模拟实现

从栈的接口中可以看出,栈实际是一种特殊的 vector ,因此使用 vector 完全可以模拟实现 stack
#include<vector>
namespace bite
{
template < class T >
class stack
{
public :
stack () {}
void push ( const T & x ) { _c . push_back ( x );}
void pop () { _c . pop_back ();}
T & top () { return _c . back ();}
const T & top () const { return _c . back ();}
size_t size () const { return _c . size ();}
bool empty () const { return _c . empty ();}
private :
std::vector < T > _c
};
}

2. queue的介绍和使用

2.1 queue的介绍

queue的文档介绍
翻译:
1. 队列是一种容器适配器,专门用于在 FIFO 上下文 ( 先进先出 ) 中操作,其中从容器一端插入元素,另一端 提取元素。
2. 队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类, queue 提供一组特定的 成员函数来访问其元素。元素从队尾入队列,从队头出队列。
3. 底层容器可以是标准容器类模板之一,也可以是其他专门设计的容器类。该底层容器应至少支持以下操作:
empty :检测队列是否为空
size :返回队列中有效元素的个数
front :返回队头元素的引用
back :返回队尾元素的引用
push_back :在队列尾部入队列
pop_front :在队列头部出队列
4. 标准容器类 deque list 满足了这些要求。默认情况下,如果没有为 queue 实例化指定容器类,则使用标准容器deque

2.2 queue的使用

2.3 queue的模拟实现

因为 queue 的接口中存在头删和尾插,因此使用 vector 来封装效率太低,故可以借助 list 来模拟实现 queue
具体如下:
#include <list>
namespace bite
{
template < class T >
class queue
{
public :
queue () {}
void push ( const T & x ) { _c . push_back ( x );}
void pop () { _c . pop_front ();}
T & back () { return _c . back ();}
const T & back () const { return _c . back ();}
T & front () { return _c . front ();}
const T & front () const { return _c . front ();}
size_t size () const { return _c . size ();}
bool empty () const { return _c . empty ();}
private :
std::list < T > _c ;
};
}

3. 容器适配器

3.1 什么是适配器

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

适配器就是一种设计模式。就比如打仗,国家之间资源的争夺,我们发现打仗是有套路的。并不是人多就一定能赢。比如经典的围魏救赵,这就是兵法。兵法跟我们写代码是一样的。我们的代码需要有可维护性。所以,就有了一些通用的方法,就有了设计模式。如今,我们已经学习了俩种设计模式。
  1. 适配器
  2. 迭代器

这些数据结构我们访问十分关心底层细节,他们访问模式可能都不一样。我们通过迭代器(像指针一样的东西),我们就像封装了(通过typdey)iterator来屏蔽底层细节,来访问数据。

这就像支付宝、微信来访问银行的资源,他们屏蔽了对各银行的访问的细节,对用户只展示支付的功能。

4. deque的简单介绍(了解)

4.1 deque的原理介绍

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

4.2简单了解dequed的底层

5、prority_queue

5.1 priority_queue的介绍

priority_queue文档介绍
翻译:
1. 优先队列是一种容器适配器,根据严格的弱排序标准,它的第一个元素总是它所包含的元素中最大的。
2. 此上下文类似于堆,在堆中可以随时插入元素,并且只能检索最大堆元素 ( 优先队列中位于顶部的元素)
3. 优先队列被实现为容器适配器,容器适配器即将特定容器类封装作为其底层容器类, queue 提供一组特定的成员函数来访问其元素。元素从特定容器的“ 尾部 弹出,其称为优先队列的顶部。
4. 底层容器可以是任何标准容器类模板,也可以是其他特定设计的容器类。容器应该可以通过随机访问迭 代器访问,并支持以下操作:
empty() :检测容器是否为空
size() :返回容器中有效元素个数
front() :返回容器中第一个元素的引用
push_back() :在容器尾部插入元素
pop_back() :删除容器尾部元素
5. 标准容器类 vector deque 满足这些需求。默认情况下,如果没有为特定的 priority_queue 类实例化指定容器类,则使用vector
6. 需要支持随机访问迭代器,以便始终在内部保持堆结构。容器适配器通过在需要时自动调用算法函数make_heap、 push_heap pop_heap 来自动完成此操作。

5.2 priority_queue的使用

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

5.3简单的模拟实现

 

最后,感谢大家

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

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

相关文章

数据库管理平台应该具备哪些功能

企业数据的的扁平一体化管理越来越普及。 一个企业如果想要做好数据扁平一体化管理的核心问题是如何高效地管理这些资源。构建一个能够完美整合、系统化组织数据&#xff0c;并提供直观可视分析界面的数据库管理平台&#xff0c;便是企业加速数字化转型的必备工具。 假如公司有…

json格式的post请求目前不行, 要换成form表单形式的post请求怎么改

问: 下面是我的代码 export function fetchDeleteList<T>(agentSessionId: string) {return post<T>({url: http://192.168.0.116:8089/pipe-ics/agent/delete,method: post,data: { agentSessionId },}) } 目前是json格式的post请求, 目前不行, 要换成form表单…

详解计算机组成原理中的层次化存储

第5章 大而快&#xff1a;层次化存储 5.1 引言 局部性原理&#xff1a;在任意一段时间内&#xff0c;程序都只会访问地址空间中相对较小的一部分内容&#xff0c;就如你只会查阅图书馆的一部分藏书一样。 时间局部性&#xff1a;某个数据被访问&#xff0c;在不久的将来可能…

CIME2025深圳国际热管理材料与设备展览会(2025.6.25-27)

CIME2025深圳国际热管理材料与设备展览会&#xff08;2025.6.25-27&#xff09; 2025.6.25-27 深圳国际会展中心 次世代热管理解决方案航天器热控分系统产品、基站环境级/机柜级热控产品以及基于环路热管的CPU、GPU、IGBT、T/R组件超级散热器其系统热阻、均温性、传热能力、逆…

递归 深搜 回溯练习

递归 深搜 回溯 题目一. 全排列II1. 题⽬链接&#xff1a;2. 题⽬描述&#xff1a;3. 解法&#xff1a;4.代码 题目二. 电话号码的字⺟组合1. 题⽬链接&#xff1a;2. 题⽬描述&#xff1a;3. 解法&#xff1a;4.代码 题目三. 括号⽣成&#xff08;medium&#xff09;1. 题⽬链…

论文阅读笔记- Language Modeling with Gated Convolutional Networks

前言 统计语言模型本质上是在给定前面若干个单词的条件下&#xff0c;通过概率建模来估计单词序列的概率分布&#xff0c;即&#xff1a; P ( w 0 , . . . , W N ) P ( w 0 ) ∏ i 1 N P ( w i ∣ w 0 , . . . , w i − 1 ) P(w_0,...,W_N)P(w_0)\prod_{i1}^NP(w_i|w_0,...…

dvwa:文件包含、文件上传

文件包含 本地文件包含&#xff08;敏感信息泄露&#xff09;和远程文件包含&#xff08;命令执行&#xff09; 本地文件包含一般包含一些本地的敏感文件&#xff0c;如&#xff1a;/etc/passwd或/etc/shadow等 远程文件包含能使得服务器代码执行&#xff0c;如包含黑客vps的…

文心一言 VS 讯飞星火 VS chatgpt (365)-- 算法导论24.3 7题

七、给定带权重的有向图 G ( V &#xff0c; E ) G(V&#xff0c;E) G(V&#xff0c;E)&#xff0c;其权重函数为 w : E → ( 1 &#xff0c; 2 &#xff0c; … &#xff0c; W ) w:E→(1&#xff0c;2&#xff0c;…&#xff0c;W) w:E→(1&#xff0c;2&#xff0c;…&…

2024年诺贝尔物理学奖 机器学习与神经网络领域前景面面观 如何抉择

近日&#xff0c;2024年诺贝尔物理学奖颁发给了机器学习与神经网络领域的研究者&#xff0c;这是历史上首次出现这样的情况。这项奖项原本只授予对自然现象和物质的物理学研究作出重大贡献的科学家&#xff0c;如今却将全球范围内对机器学习和神经网络的研究和开发作为了一种能…

基于微信小程序的家校联动平台管理系统的设计与实现(毕业论文)

目 录 第一章 绪论 1 1.1研究背景 1 1.1.1教育信息化的发展 1 1.1.2家校沟通的重要性 1 1.1.3微信小程序的优势 1 1.2国内外研究现状 1 1.2.1教育管理信息系统 1 1.2.2家校互动平台 1 1.2.3微信小程序在教育领域的应用 2 1.3本文的主要工作 2 1.3.1系统需求分析 2 1.3.2系统设计…

边缘智能(Edge Intelligence):智能计算的前沿

随着物联网&#xff08;IoT&#xff09;、5G网络和人工智能&#xff08;AI&#xff09;的快速发展&#xff0c;边缘智能&#xff08;Edge Intelligence&#xff09;作为一种新兴的技术理念&#xff0c;逐渐成为数字化时代的重要组成部分。边缘智能通过在靠近数据生成端&#xf…

正则表达式-“三剑客”(grep、sed、awk)

1.3正则表达式 正则表达式描述了一种字符串匹配的模式&#xff0c;可以用来检查一个串是否含有某种子串&#xff0c;将匹配的子串替换或者从某个串中取出符号某个条件的子串等&#xff0c;在linux中代表自定义的模式模版&#xff0c;linux工具可以用正则表达式过滤文本。Linux…

《网络安全自学教程》- Nmap使用及扫描原理分析

《网络安全自学教程》 Nmap&#xff08;Network Mapper&#xff09;是一款免费的开源网络扫描器&#xff0c;向目标主机发送特定的数据包&#xff0c;根据返回的流量特征&#xff0c;分析主机信息。主要功能有&#xff1a;「端口扫描」、「主机探测」、「服务识别」和「系统识别…

Linux之实战命令32:chroot应用实例(六十六)

简介&#xff1a; CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布&#xff1a;《Android系统多媒体进阶实战》&#x1f680; 优质专栏&#xff1a; Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a; 多媒体系统工程师系列【…

字节跳动最新音乐生成模型Seed-Music

Seed-Music是一个由字节跳动研发的音乐生成模型&#xff0c;用户可以通过输入多模态数据&#xff08;如文本描述、音频参考、乐谱、声音提示等&#xff09;来生成音乐&#xff0c;并且提供了方便的后期编辑功能&#xff0c;比如修改歌词或旋律。 Seed-Music 结合了自回归语言模…

CentOS快速配置网络Docker快速部署

CentOS裸机Docker部署 1.联通外网 vi /etc/sysconfig/network-scripts/ifcfg-ens33systemctl restart networkip addrping www.baidu.com2.配置CentOS镜像源 参考文章 进入/etc/yum.repos.d目录下找到 CentOS-Base.repo cd /etc/yum.repos.dcp CentOS-Base.repo CentOS-B…

双向广搜 bfs进阶 open the lock——hdu1195

目录 前言 传统bfs 双向广搜 open the lock 问题描述 输入 输出 问题分析 状态转变 去重 单向搜索的bfs 双向广搜 结束条件 输出步数 前言 其实这题数据不算复杂&#xff0c;不用双向广搜也可以完成&#xff0c;仅仅是为了更直观展现双向广搜的编码方式。 传统bfs bfs向来都…

通用文件I/O模型之open

前面介绍了linux系统一切皆文件的概念&#xff0c;系统使用一套系统调用函数open()、read()、write()、close()等可以对所有文件执行I/O操作。应用程序发起的I/O请求&#xff0c;内核会将其转化为相应的文件系统操作&#xff0c;或者设备驱动程序操作。接下来我们一起了解一下o…

电磁兼容(EMC):整改案例(五)EFT测试,改初级Y电容

目录 1. 异常现象 2. 原因分析 3. 整改方案 4. 总结 1. 异常现象 某产品按GB/T 17626.4标准进行电快速瞬变脉冲群测试&#xff0c;测试条件为&#xff1a;频率5kHz/100kHz&#xff0c;测试电压L&#xff0c;N线间2kV。其中频率5kHz时&#xff0c;测试通过&#xff0c;但频…

在Centos中安装、配置与使用atop监控工具

目录 前言1. atop工具的安装1.1 atop简介1.2 atop的安装步骤 2. 安装并配置netatop模块2.1 安装内核开发包2.2 安装所需依赖2.3 下载netatop2.4 解压并安装netatop2.5 启动netatop 3. atop的配置与使用3.1 配置监控周期与日志保留时间3.2 设置定时任务生成日志3.3 启动与查看at…