适配器stack和queue

news2024/12/25 15:59:36

目录

什么是适配器

模拟实现stack

stack的特性

STL中stack的基本框架

接口实现

模拟实现queue

queue的特性

STL中queue的框架


什么是适配器

适配器:所谓适配,适配的是容器(vector,list,deque....)

也就是不管是什么容器,都可以套用适配器,正因如此,所以我们在编写适配器时需要一个模板参数来接收容器

模拟实现stack

stack的特性

stack:栈,具有后进先出的特性

我们可以把栈看成一个桶,我们往这个桶里放了许多的东西,当我们要取最底下的东西时,要把桶顶上的物品先拿走,如果脱离了这个性质那么这个就不是桶了

同样的如果我们要取栈底的数据时,我们需要先取出压住这个数据的数据

 栈的插入和删除只能在一端进行,我们把这一端叫做栈顶

 我们依次往里面插入一些数据试试,依次插入:1,2,3,4,5,6

插入后如图

 此时如果我们要取出最底下的1,就需要把上面的6,5,4,3,2都移走

STL中stack的基本框架

在STL中,stack是一个适配器,也就是无论我们使用list还是vector不管使用什么容器,只要能符合栈的性质,就是一个栈

注意:需要容器支持stack所调用的那些接口才可以

STL中,在模板中加入了一个模板参数为容器模板(container)

通常我们都把stack的模板容器的缺省值设置为deque,原因是deque尾插尾删效率都很高,并且deque的空间浪费不会太大

deque的具体介绍

template<class T,class Container = deque<int>>
class stack
{
    public:
    //接口实现
    private:
        Container _con;
};

且stack的构造/析构函数不需要显示写,会自动调用容器的构造/析构函数 

接口实现

stack的接口都是复用容器的接口

template<class T , class Container = deque<int>>
class stack
{
    public:
        bool empty() const//判空
        {
            return _con.empty();
        }
        size_t size() const//返回大小
        {
            return _con.size();
        }
        T& top()//返回栈顶的数据,也就是最近一次插入的数据
        {
            return _con.back()
        }
        const T& top()const
        {
            return _con.back();
        }
        void push (const T& x)//插入从尾部插入对于所有容器都支持
        {
            _con.push_back(x)
        }
        void pop()
        {
            _con.pop_back();//尾上插入的就尾删,栈只支持一端插入删除
        }
    private:
        Container _con;
};

模拟实现queue

queue的特性

queue我们一般叫做队列,它具有先进先出的性质

如图

 通常

我们把插入的一端叫做队尾

删除的一端叫做队头

如果我们依次插入一段数据,1、2、3、4、5、6、7

 那么此时删除的顺序就是:1,2,3,4,5,6,7依次删除

STL中queue的框架

queue跟stack一样也是容器适配器,那么就需要有一个容器模板参数

template<class T,class Container = deque<int>>
class queue
{
    public:
    //接口实现
    private:
        Container _con;
};

注意:队列的容器不能使用vector,原因是队列是需要进行头删的,但vector没有头删

接口实现

template<class T,class Container = deque<int>>
class queue
{
    public:
        //队尾插入
        void push(const T& x)
        {
            _con.push_back();
        }
        //队尾删除
        void pop()
        {
            _con.pop_back();
        }
        //判空
        bool empty()
        {
            return _con.empty();
        }
        size_t size()
        {
            return _con.size();
        }
        //队头数据
        const T& front()
        {
            return _con.front();
        }
        T& front()
        {
            return _con.front();
        }
        //队尾数据
        const T& back()
        {
            return _con.back();
        }
        T& back()
        {
            return _con.back();
        }
    private:
        Container _con;
};

这期内容比较少,因为只讲了干货,那这期就到这了,感谢大家的支持

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

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

相关文章

chatgpt赋能python:Python如何设置输入的SEO

Python如何设置输入的SEO Python是一种高级的编程语言&#xff0c;具有容易上手、可扩展和开源等特点&#xff0c;因此在软件开发过程中得到广泛的应用。然而&#xff0c;如果您想让您的Python项目在搜索引擎上获得更好的排名和流量&#xff0c;您需要考虑如何设置输入的SEO。…

二叉搜索树(Binary Seach Tree)模拟实现

目录 二叉搜索树的性质 二叉搜索树的实现 结点类 接口类(BSTree) 二叉搜索树的插入(insert) 二叉搜索树的查找(find) 二叉搜索树删除(erase) 第二种、删除的结点右子树为空 第三种、删除的结点左子树为空 第四种、删除的结点左右都不为空 实现 二叉搜索树模拟实现代…

基于jupyter的轮廓检测及功能

文章目录 一、实验介绍二、实验步骤三、实验任务任务一&#xff1a;轮廓特征练习一: 找到每个轮廓的方向任务二&#xff1a;边界矩形练习二: 围绕轮廓裁剪图像 总结 一、实验介绍 1. 实验内容 本实验将学习轮廓检测及功能。 2. 实验要点 生成二进制图像来查找轮廓找到并画出…

kotlin函数返回函数

kotlin函数返回函数 https://blog.csdn.net/zhangphil/category_12220817.htmlhttps://blog.csdn.net/zhangphil/category_12220817.html 例1&#xff1a; // func返回匿名函数 fun func(msg: String): (String, Int) -> String {println("func函数 msg:$msg")/…

电能管理系统多功能电力仪表的应用 安科瑞 许敏

摘 要&#xff1a;基于车间用电设备的电能管理系统架构思路及实施方法&#xff0c;从硬件和软件方面对此方法进行了阐述。对车间旧设备改造以及新的电能管理系统提供一种思路和便捷的方法。 关键词&#xff1a;电能管理系统&#xff1b;多功能电力仪表&#xff1b;PLC&#x…

Azure Log Analytics:与Power BI集成

注&#xff1a;本文最初发布于https://d-bi.gitee.io, 2023年6月迁移至CSDN 前述 Azure Log Analytics是Azure Monitor中的一项分析服务。本文将讲述通过Log Analytics与Power BI集成的方式&#xff0c;获取Power BI工作区内的日志信息&#xff0c;包括各PBI数据集的CPU消耗&a…

6/5~6/6总结

创建存储过程 DELIMITER // CREATE PROCEDURE usingid() BEGIN SELECT AVG(id) FROM user; END // DELIMITER ; 要用DELIMITER //指定结束符为 "//", 要调用该存储过程&#xff1a; CAll usingid; 创建成功后在navicat里面的函数界面可以看见刚刚创建的存储过程…

【TCP/IP】IP地址与域名之间的转换 - gethostbyname 和 gethostbyaddr函数

目录 域名系统 DNS服务器 IP地址和域名之间的转换 通过域名获取IP地址 通过IP地址获取域名 域名系统 域名系统&#xff08;英文&#xff1a;Domain Name System&#xff0c;缩写&#xff1a;DNS&#xff09;是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式…

chatgpt赋能python:Python如何竖直输出?

Python如何竖直输出&#xff1f; Python作为一种功能强大的编程语言&#xff0c;在数据分析、人工智能、Web开发等领域得到广泛应用。不过&#xff0c;对于一些初学者或者日常编程较少的开发者来说&#xff0c;可能会遇到一些问题&#xff0c;例如如何竖直输出。 在Python中&…

软件过程与管理——民宿管理系统的项目实践报告(文档+ppt+图表源文件)

目录 一、题目分析与设计 二、评分标准 三、文档目录 四、文档下载 一、题目分析与设计 1、团队组织建设 同学们以3-5人为一组&#xff0c;最多5人一组&#xff0c;每组选择一个具体的软件项目&#xff0c;如现进行的个人毕业设计题目等为主题&#xff0c;要求项目的工作…

量子模拟器中的“弯曲时空”

光子盒研究院出品 当你想解释宇宙尺度的现象时&#xff0c;相对论很有效&#xff1a;比如黑洞碰撞时产生的引力波&#xff1b;量子理论在描述粒子尺度的现象时效果很好&#xff08;比如原子中单个电子的行为&#xff09;。但是&#xff0c;将这两者以一种完全令人满意的方式结合…

【SpinalHDL快速入门】4.6、复合类型之Vec

文章目录 1.1、描述1.2、声明1.2.1、实例 1.3、运算符1.3.1、比较&#xff08;Comparison&#xff09;1.3.2、类型转换&#xff08;Type cast&#xff09;1.3.3、杂项&#xff08;Misc&#xff09;1.3.4、Lib辅助函数&#xff08;Lib helper functions&#xff09; 1.1、描述 …

直播签到功能(互动功能发起端JS-SDK)

功能概述 本功能只支持角色为讲师/嘉宾/助教/管理员的用户进行发起和停止等操作。发起签到时可自定义设置签到时长和签到提示语。 图 / 讲师在直播客户端软件f中操作界面 图 / 学员直播观看页弹出签到界面 代码示例 注意&#xff0c;在开始以下步骤前需要先进行全局初始化设置…

chatgpt赋能python:Python-如何快速高效地求两数之和

Python - 如何快速高效地求两数之和 介绍 Python 是一种高级编程语言&#xff0c;适用于各种领域的软件开发。本文将介绍使用 Python 完成两个数字之和的操作。Python 以其清晰、简洁、易于学习和使用的特性闻名于世&#xff0c;既能作为脚本语言&#xff0c;又能进行面向对象…

基于stm32的超声波测距

文章目录 一、HC-SR04超声波测距模块说明1、产品特点2、电气参数3、HC-SR04超声波测距模块4、超声波时序图 二、 CUBEMX配置三、keil配置代码 模块选择&#xff1a; stm32f103c8芯片 HC-SR04超声波测距模块 一、HC-SR04超声波测距模块说明 1、产品特点 HC-SR04 超声波测距模块…

chatgpt赋能python:Python如何将两张图片叠加

Python如何将两张图片叠加 介绍 图像处理是计算机视觉领域的重要应用&#xff0c;而Python已经成为了图像处理中最流行的编程语言之一。在图像处理的过程中&#xff0c;有时需要将两张图片叠加在一起&#xff0c;这就需要用到Python中的图像叠加技术。 本文将介绍Python中如…

chatgpt赋能python:Python如何空一行:介绍

Python如何空一行&#xff1a;介绍 在Python编程中&#xff0c;经常需要在输出文字或代码时进行空行分隔。一个常用的场景就是在代码中加入注释&#xff0c;将注释与代码分开&#xff0c;使代码逻辑更加清晰易懂。在某些情况下&#xff0c;也需要在输出文字时进行空行分割&…

一次方维o2o商城PHP审计学习

PHP审计源码学习 一、渗透测试 起因是朋友问fanwei o2o源码搭建的站后台能不能拿shell&#xff0c;于是我进后台进行了一番尝试&#xff0c;各功能点没什么进展&#xff0c;好多地方过滤了&#xff0c;上传也是白名单&#xff0c;编辑器的1day修了&#xff0c;万幸的是有个拿…

priority_queue(优先级队列)模拟实现(堆方式)

目录 priority_queue初步介绍 堆 堆的模拟实现 接口实现 插入(push) AdJustUp(向上排序)接口 删除(pop) AdJustDown(向下排序算法) 适配器堆总结 仿函数 用仿函数对堆进一步封装 用堆进行封装优先级队列 代码总结 priority_queue初步介绍 priority_queue的性质是…

BOOST 恒压控制驱动芯片,外围电路简单

应用说明 Hi8000 是一款外围电路简单的 BOOST 升压恒压控制驱动芯片&#xff0c;适用于 2.7-40V 输入电压范围的升压恒压电源应用领域&#xff0c;启动电压可以低至 2.5V&#xff0c;可以广泛应用 于太阳能、便携式数码产品&#xff0c;锂电升压应用等供电领域。 应用领域 移…