【Stack和Queue模拟实现】

news2024/9/21 5:53:41

Stack和Queue模拟实现

小杨

在模拟实现之前,有必要介绍一下什么是容器适配器

容器适配器

适配器是一种设计模式,该种模式是将一个类的接口转换成客户希望的另一个接口。
在这里插入图片描述
虽然stack和queue中也可以存放元素,但在STL中并没有将其划分在容器的行列,而是将其称为容器适配器,这是因为stack和queue只是对其他容器的接口进行了包装。
容器适配器:容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层。

容器适配器名称特性
stackstack作为一种容器适配器来实现,其底层来来说标准容器vector、deque、list均符合这些需求,默认情况下,如果没有stack指定特定的底层容器,默认情况下使用deque
queuequeue作为一种容器适配器来实现,其底层来来说标准容器deque和list均符合这些需求。默认情况下,如果没有为queue实例化指定容器类,则使用标准容器deque

在这里插入图片描述
在这里插入图片描述
因此,要模拟实现stack和queue就只需要调用所指定容器的各个成员函数,这里stack和queue就用默认的底层deque了。

stack

stack相关接口
函数说明接口说明
stack()构造空的栈
empty()检测stack是否为空
检测stack是否为空返回stack中元素的个数
top()top()
push()将元素val压入stack中
pop()将stack中尾部的元素弹出
stack模拟实现
namespace yang
{

    template<class T, class Con = deque<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 { _c.back() };
        size_t size()const { return _c.size(); }
        bool empty()const { return _c.empty; }
    private:
        Con _c;
    };
}

queue

queue相关接口
函数说明接口说明
queue()构造空的队列
empty()检测队列是否为空,是返回true,否则返回false
size()返回队列中有效元素的个数
front()返回队头元素的引用
back()返回队尾元素的引用
push()在队尾将元素val入队列
pop()将队头元素出队列
queue模拟实现
namespace yang
{
    template<class T, class Con = deque<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:
        Con _c;
    };
};

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

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

相关文章

星环科技推出革新性智能业务分析洞察平台——无涯·问数

5月30-31日&#xff0c;2024向星力未来数据技术峰会期间&#xff0c;星环科技重磅发布一款新产品无涯问数——智能业务分析洞察平台。该产品旨在解决传统BI在数据获取、使用门槛和效率方面的挑战&#xff0c;为决策者和业务人员带来前所未有的数据分析体验。 无涯问数的问世&am…

丰田生产方式:拒绝表面效率!!!

在需要的时间&#xff0c;一件一件地生产所需要的东西&#xff0c;就可以避免“过量生产的浪费”。但是&#xff0c;这时你必须知道“需要的时间”是在什么时候。于是&#xff0c;“单位时间”的意义就很重要了。 所谓“单位时间”&#xff0c;就是指制造一件产品的时间。这必须…

【开源分享】2024最新php在线客服系统源码|聊天系统 附搭建教程

源码的主要特色 自动回复和机器人知识库&#xff1a;通过后台设置机器人知识库&#xff0c;系统可以根据关键词自动回复用户&#xff0c;提高响应速度和服务效率。 内容过滤&#xff1a;支持设置违禁词&#xff0c;避免接收包含不良信息的用户消息&#xff0c;维护平台健康。…

黑马JavaWeb后端案例开发(包含所有知识点!!!)

目录 1.准备工作 环境搭建 开发规范 REST&#xff08;REpresentation State Transfer&#xff09;,表述性状态转换&#xff0c;它是一种软件架构风格 注意事项 统一响应结果 2.部门管理功能 查询部门 删除部门 新增部门 RequestMapping 3.员工管理功能 分页查询 批…

Vue前端工程

创建一个工程化的vue项目 npm init vuelatest 全默认回车就好了 登录注册校验 //定义数据模型 const registerDataref({username:,password:,rePassword: }) //校验密码的函数 const checkRePassword(rule,value,callback)>{if (value){callback(new Error(请再次输入密…

受够了限速,用teamOS搭建家庭私有云盘,不再受限于人

在现在这个数字化的年代&#xff0c;手机、电脑、平板&#xff0c;到处都有我的照片、视频和文件。 每次想找个东西都得翻遍所有设备&#xff0c;简直就像大海捞针。 我也试过用那些公有云存储服务&#xff0c;但真的用不惯。首先&#xff0c;我总是担心数据安全问题&#xff…

oracle linux源码安装rabbitMQ并部署三节点rabbitmq集群

一.安装rabbitMQ的基础软件下载 Rabbitmq是现阶段比较常用的一个消息队列服务&#xff0c;是基于erlang语言开放的&#xff0c;需要首先安装erlang&#xff0c;并且rabbitmq和erlang的版本是有关系的。 1.基础依赖软件&#xff08;主要是是编译和erlang安装的时候的一些依赖软…

君正T41开发板环境搭建_串口登陆_配置IP_telnet登陆_mount挂载_安装交叉编译工具链

目录 1 开发板外观 2 串口连接 3芯片内存情况 4 配置IP地址 5 telnet登陆 6 mount挂载目录 7 安装交叉编译工具链 1 开发板外观 2 串口连接 我直接用MobaXterm连接&#xff0c;虽然我还没有文档&#xff0c;但是我觉得波特率大概率就是115200&#xff0c;试了下确实可以…

电流在PCB中的奥秘:《PCB电流与信号完整性设计》解读

我们生活中的每一个电子设备&#xff0c;从简单的家用电器到复杂的通信系统&#xff0c;都依赖于高效、可靠的印制电路板。然而&#xff0c;随着工作频率的提高和电路尺寸的缩小&#xff0c;PCB设计中的信号完整性问题变得日益突出。如何在设计阶段就确保信号的高质量传输&…

Android 10.0 Launcher 启动流程

在前面SystemUI启动流程中说到&#xff0c;在SystemServer中会去启动各种系统服务&#xff0c;这里的launcher也是启动的其中一个服务ActivityManagerService去启动的。在android10之前&#xff0c;系统四大组件的启动都是在ActivityManagerService中&#xff0c;在android10中…

NPDP学习之路:科学规划顺利拿证

备考策略&#xff1a;制定合理学习计划 开始学习前需要制定一个合理的学习计划是备考过程中的关键。 最好根据自己个人的工作和生活习惯&#xff0c;合理安排每天的学习时间&#xff0c;并合理分配各个知识点的学习进度&#xff0c;把不理解的问题提前记录下来&#xff0c;要…

[渗透测试学习] Editorial-HackTheBox

文章目录 Editorial-HackTheBox信息搜集漏洞利用权限提升参考文章Editorial-HackTheBox 信息搜集 nmap扫描端口 nmap -sV -sC -v 10.10.11.20扫描结果如下 PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 8.9p1 Ubuntu 3ubuntu0.7 (Ubuntu Linux; protocol 2.…

报销管理软件怎么选?主流的10款对比

国内外排名前十的报销软件大对比&#xff1a;合思、Zoho Expense、金蝶财务报销系统、每刻报销、慧算账、Expensify、齐业成、汇联易、分贝通、QuickBooks Online。 在小型企业中&#xff0c;报销管理可能还可以由财务人员手工完成。然而&#xff0c;对于中到大型企业和快速发展…

『 Linux 』基于阻塞队列的生产者消费者模型

文章目录 生产者-消费者模型概述生产者消费者模型的高效性虚假唤醒信号丢失生产者消费者模型的模拟实现参考代码 生产者-消费者模型概述 生产者消费者模型是一种多线程设计模式,常见于解决多个生产者线程和多个消费者线程之间如何安全有效地共享数据; 该模型中存在三种关系,两个…

多级指针的使用

文章目录 &#x1f34a;自我介绍&#x1f34a;指针的设计规则&#x1f34a;多级指针的结论&#x1f34a;二级指针输出数组中的某个值的表示方法 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以&#xff1a;点赞关注评论收藏&#xff08;一键四连&#xff09;哦~ &…

Effective Java 中文版(第2版 电子版教程)

前言 Java从诞生到日趋完善&#xff0c;经过了不断的发展壮大&#xff0c;目前全世界拥有了成千上万的Java开发人员。如何编写出更清晰、更正确、更健壮且更易于重用的代码&#xff0c;是大家所追求的目标之一。本书的作者JoshuaBloch曾经是Sun公司的杰出工程师&#xff0c;带…

vite+typescript项目 报错:找不到模块“./*.vue”或其相应的类型声明——解决方案

declare module *.vue {import type { DefineComponent } from vueconst vueComponent: DefineComponent<{}, {}, any>export default vueComponent }

fastjson-1.2.24利用

参考视频&#xff1a;fastjson反序列化漏洞2-1.2.24利用 参考博客&#xff1a;Fastjson系列二——1.2.22-1.2.24反序列化漏洞 分析版本 fastjson1.2.24 JDK 8u141 fastjson反序列化特点 不需要实现Serializable 因为对于找不到符合条件的反序列化器&#xff0c;就把类当作…

SAP ERP 通过SAP PO LDAP适配器与微软AD域服务系统集成案例

一、客户介绍 上海某芯片制造公司的主要产品应用于图像传感器、 图像信号处理芯片、 低功耗芯片、 射频芯片等。专注集成电路技术开发与制造&#xff0c;服务于图像传感器、图形图像信号处理芯片、低功耗芯片、射频芯片等领域的全球客户。 二、项目需求 该企业内部办公电…

Flutter 初识:数据表格和卡片

Flutter数据表格和卡片小结 Table属性解析示例TableRow属性解析 TableCell属性解析 DataTable属性解析示例DataColumn属性解析示例 DataRow属性解析示例 DataCell属性解析 Card属性解析示例 Table Table 是 Flutter 中用于显示表格布局的小部件。它允许你定义行和列&#xff0…