C++基础:模拟实现queue和stack。底层:适配器

引言

模拟实现queue和stack,理解适配器,实现起来非常简单。

一、适配器 

        适配器是一种能让原本不兼容的接口协同工作的设计模式或者组件。它的主要作用是对一个类的接口进行转换,使其符合另一个类的期望接口,进而实现适配和复用。(看下面代码来理解)

可以理解为是一个更高层次的封装。(解耦性更高)

比如:stack可以封装list来实现,queue也可以封装一个list来实现,但是list对内存的空间利用率不高。用vector封装实现的话,头插和头删的效率很低。

所以底层实现了一个双端队列deque用来解决上面的问题。

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

deque的底层这里就不多描述了。

二、模拟实现queue

queue是先进后出的数据结构,即只能在尾部插入,头部删除。

#include <deque>namespace stl
{template<class T, class Container = deque<T>> //用deque做适配器class queue{public:void push(const T& x) //尾插{_con.push_back(x);}void pop() //头删{_con.pop_front();}size_t size() const  //元素个数{return _con.size();}bool empty() const  //判空{return _con.empty();}const T& front() const //返回队头{return _con.front();}T& front() //返回队头{return _con.front();}const T& back() const  //返回队尾{return _con.back();}T& back()  //返回队尾{return _con.back();}private:Container _con; //适配器适配数据结构};
}

三、模拟实现stack

stack是先进先出的数据结构。

#pragma once
#include <deque>
using namespace std;namespace stl
{template<class T, class Container = deque<T>>class stack{public:void push(const T& x) //入栈{_con.push_back(x);}void pop()  //出栈{_con.pop_back();}void size() const  //元素个数{return _con.size();}bool empty() const  //判空{return _con.empty();}const T& top() const  //返回栈顶{return _con.back();}T& top() //返回栈顶{return _con.back();}private:Container _con;};
}

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

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

相关文章

OI 杂题

OI 杂题字符串括号匹配例 1&#xff1a;与之前的类似&#xff0c;就是讲一点技巧&#xff0c;但是比较乱&#xff0c;凑合着看吧。 字符串 括号匹配 几何意义&#xff1a;考虑令 ( 为 111 变换&#xff0c;令 ) 为 −1-1−1 变换&#xff0c;然后对这个 1/−11/-11/−1 构成…

【论文阅读】Safety Alignment Should Be Made More Than Just a Few Tokens Deep

Safety Alignment Should Be Made More Than Just a Few Tokens Deep原文摘要问题提出现状与漏洞&#xff1a;当前LLMs的安全对齐机制容易被攻破&#xff0c;即使是简单的攻击&#xff08;如对抗性后缀攻击&#xff09;或良性的微调也可能导致模型越狱。核心论点&#xff1a; 作…

Generative AI in Game Development

如有侵权或其他问题&#xff0c;欢迎留言联系更正或删除。 出处&#xff1a;CHI 20241. 一段话总结本研究通过对来自 Reddit 和 Facebook 群组的 3,091 条独立游戏开发者的在线帖子和评论进行定性分析&#xff0c;探讨了他们对生成式 AI在游戏开发中多方面作用的认知与设想。研…

【C++算法】72.队列+宽搜_二叉树的最大宽度

文章目录题目链接&#xff1a;题目描述&#xff1a;解法C 算法代码&#xff1a;题目链接&#xff1a; 662. 二叉树最大宽度 题目描述&#xff1a; 解法 这里的宽度指的是一层的最右边的非空节点到一层的最左边的非空节点&#xff0c;一共的节点数。 解法一&#xff1a;硬来&am…

什么是3DVR?VR技术有哪些应用场景?

VR与3D技术解析及应用在高科技领域&#xff0c;VR和3D是两个常被提及的名词。那么&#xff0c;这两者之间究竟存在着怎样的区别与联系呢&#xff1f;简而来说&#xff0c;VR技术是3D技术的一种高级延展和深化应用。3D技术&#xff0c;即将二维设计图转化为立体、逼真的视觉效果…

栈与队列:数据结构核心解密

栈和队列的基本 栈(Stack)是一种后进先出(LIFO, Last In First Out)的数据结构。元素的插入和删除操作只能在栈顶进行。常见的操作包括压栈(push)和弹栈(pop)。 队列(Queue)是一种先进先出(FIFO, First In First Out)的数据结构。元素的插入在队尾进行,删除在队…

《C++初阶之STL》【list容器:详解 + 实现】

【list容器&#xff1a;详解 实现】目录前言------------标准接口介绍------------标准模板库中的list容器是什么样的呢&#xff1f;1. 常见的构造2. 迭代器操作std::list::beginstd::list::endstd::list::rbeginstd::list::rend3. 容量的操作std::list::sizestd::list::empty…

【灰度实验】——图像预处理(OpenCV)

目录 1 灰度图 2 最大值法 3 平均值法 4 加权均值法 5 两个极端的灰度值 将彩色图转为灰度图地过程称为灰度化。 灰度图是单通道图像&#xff0c;灰度化本质就是将彩色图的三通道合并成一个通道的过程。三种合并方法&#xff1a;最大值法&#xff0c;平均值法和加权均值法…

【linux驱动开发】编译linux驱动程序报错:ERROR: Kernel configuration is invalid.

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录一、报错二、解决方法1.先编译linux内核源码2.再重新编译驱动程序一、报错 在编译驱动程序过程中&#xff0c;经常碰到的一个小问题&#xff1a; make -C /home/lu…

Java面试宝典:MySQL中的锁

InnoDB中锁的类型非常多,总体上可以如下分类: 这些锁都是做什么的?具体含义是什么?我们现在来一一学习。 1. 解决并发事务问题 我们已经知道事务并发执行时可能带来的各种问题。最大的一个难点是:一方面要最大程度地利用数据库的并发访问能力,另一方面又要确保每个用户…

设备识别最佳实践:四维交叉验证框架

设备识别最佳实践&#xff1a;四维交叉验证框架 1. MAC地址分析&#xff08;40%权重&#xff09; - 设备身份核验 核心方法&#xff1a; # MAC地址标准化&#xff08;OUI提取&#xff09; mac"B4:2E:99:FB:9D:78" oui$(echo $mac | tr -d : | cut -c 1-6 | tr a-f A-…

《Java 程序设计》第 9 章 - 内部类、枚举和注解

大家好&#xff0c;今天我们来学习《Java 程序设计》第 9 章的内容 —— 内部类、枚举和注解。这三个知识点是 Java 中提升代码灵活性和可读性的重要工具&#xff0c;在实际开发中非常常用。接下来我们逐一展开讲解&#xff0c;每个知识点都会配上可直接运行的代码示例&#xf…

CTF Misc入门篇

在CTF比赛中&#xff0c;misc方向是必考的一个方向&#xff0c;其中&#xff0c;图形隐写是最最常见的类型。 先从Misc开始入门&#xff0c;一般会借助CTF SHOW解题平台&#xff0c;解题&#xff0c;然后进行技巧总结。 目录 图片篇(基础操作) misc1 misc2 misc3 misc4 …

Vulnhub 02 Breakout靶机

一、信息收集 我是在仅主机模式下扫描的。 以此去访问端口。 80端口是上面的主页&#xff0c;查看一下源代码&#xff0c;发现了如下图所示的注释&#xff0c;翻译过来是&#xff1a;别担心&#xff0c;没有人会来这里&#xff0c;安全地与你分享我的访问权限&#xff0c;它是…

论文阅读:2024 arxiv AutoDefense: Multi-Agent LLM Defense against Jailbreak Attacks

总目录 大模型安全相关研究&#xff1a;https://blog.csdn.net/WhiffeYF/article/details/142132328 AutoDefense: Multi-Agent LLM Defense against Jailbreak Attacks https://arxiv.org/pdf/2403.04783#page9.14 https://www.doubao.com/chat/14064782214316034 文章目录…

Spring Boot 请求限流实战:基于 IP 的高效防刷策略

前言 互联网流量就像洪水猛兽,来得快去得也快。如果不给接口装个“限速阀”,服务器瞬间被刷爆,宕机成真,根本不稀奇。没有限流机制,系统就像没有刹车的赛车,跑得太快反而翻车。为了保证服务稳定、响应迅速,保护后端资源不被恶意请求掏空,限流成必备武器。 本篇文章将…

机器学习第二课之线性回归的实战技巧

1 线性回归简介 1 线性回归应用场景 线性回归是一种用于分析自变量与连续型因变量之间线性关系的模型&#xff0c;其核心是通过拟合线性方程(y w_1x_1 w_2x_2 ... w_nx_n b&#xff09;来预测因变量或解释自变量的影响。由于其简单、可解释性强的特点&#xff0c;线性回归…

【时时三省】(C语言基础)指向指针数据的指针变量

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省在了解了指针数组的基础上&#xff0c;需要了解指向指针数据的指针变量&#xff0c;简称为指向指针的指针。怎样定义一个指向指针数据的指针变量呢?下面定义一个指向指针数据的指针变量&#…

前端css 的固定布局,流式布局,弹性布局,自适应布局,响应式布局

1. 固定布局容器的宽高是固定的&#xff0c;单位一般是px&#xff0c;不会随着屏幕大小变化2.流式布局&#xff08;百分比布局/vw&#xff09;vw: 视图宽度的百分比,1vw代表视窗宽度的1% vh: 视图高度的百分比,1vh代表视窗高度的1%特点: 宽度随屏幕大小变化单位用%或vw 高度通常…

python学习DAY26打卡

DAY 26 函数专题1&#xff1a;函数定义与参数 内容&#xff1a; 函数的定义 变量作用域&#xff1a;局部变量和全局变量 函数的参数类型&#xff1a;位置参数、默认参数、不定参数 传递参数的手段&#xff1a;关键词参数 传递参数的顺序&#xff1a;同时出现三种参数类型时…