C++STL详解(六)——stack和queue
文章目录
- 空间适配器
- stack
- stack的定义方式
- stack的使用
- stack的模拟实现
- queue
- queue的定义方式
- queue的使用
- queue的模拟实现
空间适配器
适配器是一种设计模式(设计模式是一套被反复使用的,多数人知晓的,经过分类编目的,代码设计经验的总结),该种模式是将一个类的接口转换客户希望的另外一个接口。
虽然stack和queue中也可以存放元素,但在STL中却并没有划分到容器的行列,而是将其称为容器适配器,这是因为stack和队列只是对其他容器的接口进行了包装,当我们没有显示传时,STL中stack和queue默认使用deque。
例如:
如果我们定义一个stack,并指定使用vector容器,则定义出来的实际出来的stack就可以
复用vector的接口来实现栈的各个函数接口。


stack
stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其只能从容器的一段继续元素的增删操作。
stack的定义方式
方式一:使用STL中默认的适配器定义栈。(默认为deque)
stack<int> s1;
方式二:使用特定的适配器定义栈
stack<int, vector<int>> st2;stack<char, vector<char>> st3;
stack的使用

int main()
{stack<int, vector<int>> st1;st1.push(1);st1.push(2);st1.push(3);while (!st1.empty()){cout << st1.top() << endl;st1.pop();}//3 2 1cout << st1.size() << endl; //0return 0;
}
stack的模拟实现
1:为了体现vector适配器特性,在初始栈的基础上增加一个模板参数Container,并用deque默认容器作缺省值。
2: 根据我们所传的容器类型,就变成指定容器类型的适配器,进而复用指定容器的接口实现stack成员函数,进而实现stack的各种功能。
namespace yzh
{template <class T,class Container = deque<T>>class stack{public://构造,拷贝构造,赋值都不需要。//编译器会调用自定义类型参数。void push(const T& x) //尾插{_con.push_back(x); //复用vector的push_back();}void pop() //尾删{_con.pop_back(); //复用vector的pop_back();}const T& top() const //栈顶不可以被修改。return _con.back(); //复用vector的back();}size_t size() const {return _con.size(); //复用vector的size();}bool empty() const{ return _con.empty(); //复用vector的empty;}private:Container _con;};
}
queue
queque是一种容器适配器,专门用具有先进先出的操作的上下文环境中,其只能从容器的一端插入元素,另一端提取元素。
queue的定义方式
定义方式一:使用STL中默认的适配器定义队列。(默认为deque)
queue<int> q1;
定义方式二:使用特定的适配器定义队列。
queue<int, vector<int>> q2;queue<char, list<char>> q3;
queue的使用

因为queue的接口存在头删和尾插,如果使用vector封装效率太低,所以一般借助lsit来封装。
int main()
{queue<int, list<int>> q1;q1.push(1);q1.push(2);q1.push(3);cout<<q1.back()<<endl;while (!q1.empty()){cout << q1.front() << endl;q1.pop();}//3 2 1cout << q1.size() << endl; //0return 0;
}
queue的模拟实现
1: queue不能使用vector容器封装,头插尾删效率太低。
2:写两种front和back成员函数是为支持const队列调用const front和const back ,它们的返回值是可读但不可以写的,普通队列调用普通front和普通back,返回值可读可写。
namespace yzh
{template<class T, class Container = deque<T>>class queue{void push(const T& x) //队尾入队列。{_con.push_back(x);}void pop() //对头出队列。{_con.pop_front();}T& front(){return _con.front();}//返回值可以被修改T& back(){return _con.back();}//返回值不可以被修改。T& front(){return _con.top();}const T& back()const{return _con.front();}//不可以被修改。const T& front() const{return _con.front();}bool empty() const{return _con.empty();}size_t size() const{return _con.size();}
}
相关文章:
C++STL详解(六)——stack和queue
文章目录空间适配器stackstack的定义方式stack的使用stack的模拟实现queuequeue的定义方式queue的使用queue的模拟实现空间适配器 适配器是一种设计模式(设计模式是一套被反复使用的,多数人知晓的,经过分类编目的,代码设计经验的…...
javaEE 初阶 — CSS 的 基本语法 与 引入方式
文章目录1. 基本语法规范2. 三种引入方式1. 基本语法规范 CSS 的基本语法规范是由 选择器 和 若干个声明 组成的。 选择器选中一个元素之后,这些属性都是针对于这个元素展开的。 先来看一个没有 CSS 的效果。 <body><p>这是一个段落</p> </bo…...
QEMU启动ARM32 Linux内核
目录前言前置知识ARM Versatile Express开发板简介ARM处理器家族简介安装qemu-system-arm安装交叉编译工具交叉编译ARM32 Linux内核交叉编译ARM32 Busybox使用busybox制作initramfs使用QEMU启动ARM32 Linux内核模拟vexpress-a9开发板模拟vexpress-a15开发板参考前言 本文介绍采…...
than的用法合集
首先需要了解一下than的词性,其有两个词性,一个是介词,一个是连词。 介词后面一定要接上名词性的词语,比如 i am taller then him 我比我的老师高 连词就比较自由,一般用来连接两个句子;但是使用than连词词…...
Unet 基于TCGA颅脑肿瘤MRI分割(高阶API分割模型)
目录 1. 介绍 2. dice 指标 3. resnet34 作为 backbone 的分割 4. deeplabv3 图像分割 4.1 问题 4.2 训练 4.3 预测 5. MAnet 图像分割...
[NIPS 2017] Improved Training of Wasserstein GANs (WGAN-GP)
Contents IntroductionDifficulties with weight constraintsCapacity underuseExploding and vanishing gradientsGradient penaltyReferencesIntroduction WGAN 增加了 GAN 模型训练的稳定性,但有时仍然会有生成质量不高或难以收敛的问题。作者发现上述问题经常是由 WGAN 中…...
力扣-每天的领导和合伙人
大家好,我是空空star,本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目:1693. 每天的领导和合伙人二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.正确示范④提交SQL运行结果5.…...
考虑分配与合并,用GO实现GCMarkSweep
完整源码 ≧ω≦ 希望各位爸爸们,给我点赞吧 kokool/GCByGo: 《垃圾回收的算法与实现》有感而发 (github.com) 书接上文 我们之前不考虑分配与合并情况下,用GO实现GCMarkSweep(标记清除算法),而这次我们继续回顾书本…...
浙江大学海宁IMBA提面经验分享
先来介绍一下我的个人情况:本人毕业于浙江一所普通的本科院校,毕业已经6年了,在一家互联网公司担任市场部经理。其实在参加浙大IMBA项目提面之前,我也参加了浙大MBA项目的提面,可惜只拿到了良好的结果,所以…...
Mybatis源码分析系列之第四篇:Mybatis中代理设计模型源码详解
一: 前言 我们尝试在前几篇文章的内容中串联起来,防止各位不知所云。 1:背景 我们基于Mybatis作为后台Orm框架进行编码的时候,有两种方式。 //编码方式1 UserDao userDao sqlSession.getMapper(UserDao.class); userDao.quer…...
JDBC的API详解
🍎道阻且长,行则将至。🍓 目录 一、DriverManager 驱动管理类 1.注册驱动 2.获取数据库连接 二、Connection 数据库连接对象 1.获取执行对象 2.事务管理 三、Statement 1.执行DDL、DML语句 2.执行DQL语句 四、ResultSet 以JDBC快速…...
【深度强化学习】(4) Actor-Critic 模型解析,附Pytorch完整代码
大家好,今天和各位分享一下深度强化学习中的 Actor-Critic 演员评论家算法,Actor-Critic 算法是一种综合了策略迭代和价值迭代的集成算法。我将使用该模型结合 OpenAI 中的 Gym 环境完成一个小游戏,完整代码可以从我的 GitHub 中获得…...
SQL注入——文件上传
目录 一,mysql文件上传要点 二,文件上传指令 一句话木马 三,实例 1,判断注入方式 2,测试目标网站的闭合方式: 3,写入一句话木马 4,拿到控制权 一,mysql文件上传…...
【ESP32+freeRTOS学习笔记之“ESP32环境下使用freeRTOS的特性分析(新的开篇)”】
目录【ESP32freeRTOS学习笔记】系列新的开篇ESP-IDF对FreeRTOS的适配ESP-IDF环境中使用FreeRTOS的差异性简介关于FreeRTOS的配置关于ESP-IDF FreeRTOS Applications结语【ESP32freeRTOS学习笔记】系列新的开篇 ESP-IDF对FreeRTOS的适配 FreeRTOS是一个可以适用于多个不同MCU开…...
Uipath Excel 自动化系列18-RefreshPivotTable(刷新透视表)
活动描述 RefreshPivotTable(刷新透视表):如果透视表的数据源发生变化,需使用刷新透视表活动,该活动需与Use Excel File 活动选择的 Excel 文件一起使用。 使用如下图: RefreshPivotTable(刷新透视表)属性 属性 作用 Display…...
设计模式之不变模式
在并行软件开发过程中,同步操作是必不可少的。当多线程对同一个对象进行读写操作时,为了保证对象数据的一致性和正确性,有必要对对象进行同步操作,但同步操作对系统性能有损耗。不变模式可以去除这些同步操作,提高并行…...
C++11 map
C11中Map的使用Map是c的一个标准容器,她提供了很好一对一的关系,在一些程序中建立一个map可以起到事半功倍的效果,总结了一些map基本简单实用的操作!1. map最基本的构造函数;map<string , int >mapstring; map&l…...
docker基本命令 - 数据卷
作用 ● 做数据持久化。防止容器一旦停止运行,该容器中运行产生的数据就没了 ● 不同容器之间的数据共享(大鲸鱼背上各个小集装箱之间可以共享数据) 交互式命令使用 docker run -it -v / 宿主机的绝对路径目录:/容器内绝对路径目录 镜像名 docker run -it -v / 宿…...
SQL查漏补缺
有这么一道题,先看题目,表的内容如下 显示GDP比非洲任何国家都要高的国家名称(一些国家的GDP值可能为NULL)。 错误的查询: SELECT name FROM bbcWHERE gdp > ALL (SELECT gdp FROM bbc WHERE region Africa)正确的查询: SE…...
偏向锁撤销
偏向状态 一个对象创建时: 如果开启了偏向锁(默认开启),那么对象创建后,markword 值为 0x05 即最后 3 位为 101,这时它的thread、epoch、age 都为 0。偏向锁是默认是延迟的,不会在程序启动时立…...
无线充电技术解析:从Qi标准到射频远距充电的现状与未来
1. 无线充电的现状与用户困境作为一名长期关注消费电子与网络通信设备的技术博主,我每天打交道最多的就是各种“电老虎”和“充电宝”。Rebecca Day在文章里描述的那个圣诞场景,我简直不能再熟悉了——在一堆新设备的包装盒里翻找线缆,在抽屉…...
Linux下Cursor AI编辑器自动化安装脚本设计与实现
1. 项目概述:为什么我们需要一个Cursor的Linux安装脚本如果你是一个在Linux环境下工作的开发者,并且对AI辅助编程工具感兴趣,那么Cursor这个名字你一定不陌生。作为一款集成了强大AI能力的代码编辑器,它正迅速成为许多程序员的新宠…...
Elasticsearch实战:从索引设计到性能优化的完整指南
Elasticsearch实战:从索引设计到性能优化的完整指南 大家好,我是迪哥。Elasticsearch 是我们系统的核心搜索组件,从商品搜索到日志分析,从全文检索到聚合分析,它无处不在。今天就聊聊 ES 的索引设计和性能优化经验。 索…...
KouriChat + DeepSeek + 微信接入:本地 AI 角色聊天机器人搭建实录
🎁个人主页:User_芊芊君子 🎉欢迎大家点赞👍评论📝收藏⭐文章 🔍系列专栏:AI 文章目录: 前言1 KouriChat项目简介2 环境准备3 环境安装及项目部署3.1 Python3.11 安装3.2 启动KouriC…...
分布式缓存策略:提升应用性能和可扩展性
分布式缓存策略:提升应用性能和可扩展性 一、分布式缓存概述 1.1 分布式缓存的定义 分布式缓存是一种将数据存储在多个节点上的缓存系统,它通过在内存中存储常用数据,减少对后端数据库的访问,从而提高应用性能和可扩展性。 1.…...
浏览器端微信使用指南:告别繁琐安装,开启轻量沟通新时代
浏览器端微信使用指南:告别繁琐安装,开启轻量沟通新时代 【免费下载链接】wechat-need-web 让微信网页版可用 / Allow the use of WeChat via webpage access 项目地址: https://gitcode.com/gh_mirrors/we/wechat-need-web 还在为微信PC版的庞大…...
技术栈选择的跟风陷阱:新潮技术与稳定性的平衡
在软件测试行业,技术迭代的速度如同飞驰的列车,新的测试框架、自动化工具、性能分析平台等层出不穷。从早期的Selenium到如今的Playwright,从JUnit到TestNG,再到新兴的Cypress、Pytest等,每一种新技术的出现都伴随着行…...
从‘Hello World’到打开PRT文件:一个完整的NX C++外部exe开发入门实战(VS2015 + NX12)
从‘Hello World’到打开PRT文件:一个完整的NX C外部exe开发入门实战(VS2015 NX12) 在工业设计领域,NX(原Unigraphics)作为一款功能强大的CAD/CAM/CAE软件,其二次开发能力为工程师提供了极大的…...
别再到处找DEM了!手把手教你用ArcGIS Pro + Python脚本,从NASA官网免费下载并拼接出完整的中国90米高程数据
从NASA获取中国90米高程数据的自动化解决方案 在GIS和遥感研究领域,获取高质量的数字高程模型(DEM)数据是许多项目的基础工作。然而,对于中国区域的完整覆盖、高精度且免费可用的DEM数据,研究者们常常面临获取困难。本文将介绍如何利用ArcGI…...
BetterRTX终极指南:三步免费提升Minecraft画质的完整方案
BetterRTX终极指南:三步免费提升Minecraft画质的完整方案 【免费下载链接】BetterRTX-Installer The Powershell Installer for BetterRTX! BetterRTX is a Ray-Tracing mod for Minecraft Bedrock. 项目地址: https://gitcode.com/gh_mirrors/be/BetterRTX-Insta…...
