STL--stack、queue实现

STL中,vector、list 是容器,自己存储一系列的数据进行增删查改,而 stack、queue 是一种特殊的容器,叫容器适配器,提供一种特定的接口来访问底层容器。

STL--stack实现

template<class T, class Container = deque<T>>class stack{public:stack(){}void push(const T& x){return _con.push_back(x);}void pop(){return _con.pop_back();}size_t size(){return _con.size();}const T& top(){return _con.back();}bool empty(){return _con.empty();}private:Container _con;};

STL--queue实现 

template<class T,class Container = deque<T>>class queue{public:queue(){}void push(const T& x){_con.push_back(x);}void pop(){_con.pop();}const T& front(){return _con.front();}const T& back(){return _con.back();}size_t size(){return _con.size();}bool empty(){return _con.empty();}private:Container _con;};

stack可以使用 vector、list、deque 来适配;queue只能通过 list、deque来适配,因为 queue 的 pop相当于是头删,vector中没有头删这个功能!

容器适配器默认参数 deque

deque叫双端队列,但它不是队列,它的意思是进行头部和尾部插入、删除比较方便。

deque的内部是由多个 buff 子数组和一个中控指针数组,当中控数组满了之后才需要扩容,并且扩容的代价极低(新开空间后,只需要拷贝指针即可)

虽然 deque 也可以进行任意位置的插入和删除,但效率却不是很高。

中间插入删除:当每个 buff数组 一样大,需要整体挪动数据,中间插入删除效率低,但下标的随机访问 [ ] 快很多!因为 当每个buff 数组一样大时,可以直接计算出数据的下标;当每个 buff 数组不一样大时,中间插入删除不需要整体挪动数据,只需要对buff 单独操作即可,但下标的计算将会困难很多!

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

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

相关文章

Altium Designer软件界面切换为浅灰色与深灰色的方法图文教程及视频演示

目录 视频演示1&#xff0c;概述2&#xff0c;切换方法3&#xff0c;总结 视频演示 Altium Designer软件界面切换方法演示 欢迎点击浏览更多高清视频演示 1&#xff0c;概述 Altium Designer软件界面主题色调的切换&#xff0c;本文演示Altium Designer软件切换为浅灰色和深灰色…

折线图——根据时间间隔X轴不等间距展示

折线图——根据时间间隔X轴不等间距展示 option option {"title": {"text": "X轴不等间距分布","left": "center","textStyle": {"fontSize": 14}},"tooltip": {"trigger": &quo…

Gartner2023数据库魔力象限发布 阿里云依旧领导者 腾讯退出 EDB/Yugabyte进入

这是一个跨越数年的系列&#xff0c;历史文章参考&#xff1a; * 数据库魔力象限2022&#xff1a;阿里领先、腾讯再次进入 * 2021 藏在魔力象限中的数据库江湖 * Gartner云计算魔力象限2018 概述 Gartner云数据库魔力象限&#xff08;后简称“象限”或“MQ”&#xff09;一…

【数字图像处理】实验四 图像分割

一、实验内容&#xff1a; 1&#xff0e; 熟悉和掌握利用Matlab工具进行数字图像的读、写、显示等数字图像处理基本步骤。 2&#xff0e; 熟练掌握各种图像分割的基本原理及方法。 3&#xff0e; 能够从深刻理解图像分割&#xff0c;并能够思考拓展到一定的应用领域。 二、实验…

谈谈 tcp 慢启动与拥塞控制

慢启动是一种 capacity-search 策略&#xff0c;不限于 tcp&#xff0c;但不说 tcp 慢启动不配标题党&#xff0c;所以就说 tcp 慢启动。 慢启动用指数灌报文的方式快速探测网络容量&#xff0c;所谓 “慢” 是起点慢。值得注意的是&#xff0c;传统慢启动不做 pacing&#xf…

从DevOps状态报告看技术团队的文化建设

本文源自一次内部分享&#xff0c;借由此机会又把历年的DevOps状态报告翻看了一遍&#xff0c;其实大多数时候我们对于DevOps的理解都在于流程&#xff0c;工具&#xff0c;实践这些看得见摸得着的东西&#xff0c;但就像文末的几点思考所说的那样&#xff0c;我们一直相信技术…

XML + 4种常见解析方式

XML&#xff08;eXtensible Markup Language&#xff09;是一种常用于存储和交换数据的标记语言。在Java中&#xff0c;有多种方式可以解析XML文档。以下是四种常见的XML解析方式&#xff1a; 1. **DOM解析&#xff08;Document Object Model&#xff09;&#xff1a;** - …

Qt 6.3 学习笔记

文章目录 Qt的安装和配置创建一个Qt项目信号和槽布局和控件绘图和动画数据库和网络 Qt是一个跨平台的C图形用户界面应用程序开发框架。它提供了创建GUI应用程序的工具和库。Qt 6.3是Qt的最新版本&#xff0c;引入了许多新特性和改进。在这个章节中&#xff0c;我们将详细介绍如…

Vue表格中鼠标移入移出input显示隐藏 ,有输入值不再隐藏

Vue表格中鼠标移入移出input显示隐藏 , 不再隐藏的效果 <el-tableref"table":data"tableDatas"borderstyle"width: 100%":span-method"arraySpanMethod"id"table"row-key"id"cell-mouse-enter"editCell&q…

VScode安装C/C++编译器步骤

一、安装C/C插件 二、安装 MinGW-w64 工具链 使用国内源 git clone https://gitee.com/cuihongxi/ubuntu2-mac.git 下载后进入到VScode文件夹下&#xff0c;点击msys2-x86_64-20231026.exe进行安装 完成后&#xff0c;确保选中“立即运行 MSYS2”框&#xff0c;然后选择“完…

JVM是什么?

JVM (Java Virtual Machine) 是 Java 编程语言的运行环境&#xff0c;它是一个虚拟的计算机&#xff0c;可以在不同的操作系统上运行 Java 程序。JVM 是 Java 的核心部分&#xff0c;提供了将 Java 代码翻译成特定计算机系统指令的功能。以下是 JVM 的一些重要概念和原理的详细…

Java容器学习,一文读懂Java容器使用知识文集。

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…