【C++】stack与queue(相关接口介绍、容器适配器、deque、模拟实现)

一、stack

 1.1 stack介绍

  1.  stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行 元素的插入与提取操作。
  2. stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定 的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。
  3. stack的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类,这些容器类应该支持以下 操作: empty:判空操作 back:获取尾部元素操作 push_back:尾部插入元素操作 pop_back:尾部删除元素操作
  4. 标准容器vector、deque、list均符合这些需求,默认情况下,如果没有为stack指定特定的底层容器, 默认情况下使用deque。

1.2 stack的使用

函数说明接口说明
stack()

构造空的栈

empty()检测stack是否为空
size()返回stack中元素的个数
top()返回栈顶元素的引用
push()将元素val压入stack中
pop()将stack中尾部的元素弹出

二、ququq

2.1queue介绍

  1. 队列是一种容器适配器,专门用于在FIFO上下文(先进先出)中操作,其中从容器一端插入元素,另一端 提取元素。
  2. 队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的 成员函数来访问其元素。元素从队尾入队列,从队头出队列。
  3. 底层容器可以是标准容器类模板之一,也可以是其他专门设计的容器类。该底层容器应至少支持以下操 作: empty:检测队列是否为空 size:返回队列中有效元素的个数 front:返回队头元素的引用 back:返回队尾元素的引用 push_back:在队列尾部入队列 pop_front:在队列头部出队列
  4. 标准容器类deque和list满足了这些要求。默认情况下,如果没有为queue实例化指定容器类,则使用标 准容器deque。

2.2 queue的使用

函数声明接口说明
queue()构造空的队列
empty()检测队列是否为空,是返回true,否则返回false
size()返回队列中有效元素的个数
front()返回队头元素的引用
back()返回队尾元素的引用
push()在队尾将元素val入队列
pop()将队头元素出队列

三、容器适配器

3.1什么是适配器

容器适配器不是全新的容器,而是对已有容器的再包装,通过封装和定制原有容器的部分接口,使得适配后的容器表现出特定的逻辑结构和操作规则。及可以用原有接口实现新的接口

3.2 deque的简单介绍

stack与queue默认使用的就是deque

顺序表的特点:

  1. 可以随机下表访问元素
  2. 在头部或者中间插入删除数据需要移动数据,效率不高
  3. 扩容时有消耗

链表的特点:

  1. 在哪个位置插入删除效率都很高
  2. 不支持随机下标访问

        对于deque它就像是vector与list的结合版,它头插尾插、头删尾删的效率都很高支持随机下标访问、但是美中不足的是在中间插入删除时很复杂,效率很低并且其下标访问的效率并没有vector的效率高,接下来介绍一下deque的大致结构

deque插入一个数据时,会开辟一个小数组,当这个小数组满了时,不会扩容,而是再开辟一个小数组,这些小数组通过中控指针数组管理

3.3 stack模拟实现

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

3.4 queue模拟实现

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

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

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

相关文章

冯喜运:4.17昨日黄金完美区间多空通杀,今日黄金原油分析

【黄金走势分析 】&#xff1a;黄金昨日整体过山车&#xff0c;早盘黄金冲高2392一线后回落&#xff0c;价格在2379-2389区间震荡&#xff0c;午后区间下移&#xff0c;价格在2362-2380继续震荡&#xff0c;晚间价格再次触及2363支撑反弹&#xff0c;连阳上升突破早间高点&…

2024基于PHP开发的微信抖音小程序点餐系统开发源代码案例

最近新开发了一套小程序点餐系统&#xff0c;用户点餐之后可以选择堂食或者是外卖到家&#xff0c;这套系统主要功能有&#xff0c;产品展示&#xff0c;支付系统&#xff0c;外卖配送&#xff0c;用户系统&#xff0c;积分系统&#xff0c;商家管理系统&#xff0c;抽奖系统&a…

SCI一区 | Matlab实现POA-TCN-BiGRU-Attention鹈鹕算法优化时间卷积双向门控循环单元注意力机制多变量时间序列预测

SCI一区 | Matlab实现POA-TCN-BiGRU-Attention鹈鹕算法优化时间卷积双向门控循环单元注意力机制多变量时间序列预测 目录 SCI一区 | Matlab实现POA-TCN-BiGRU-Attention鹈鹕算法优化时间卷积双向门控循环单元注意力机制多变量时间序列预测预测效果基本介绍模型描述程序设计参考…

Python SQL解析和转换库之sqlglot使用详解

概要 Python SQLGlot是一个基于Python的SQL解析和转换库,可以帮助开发者更加灵活地处理和操作SQL语句。本文将介绍SQLGlot库的安装、特性、基本功能、高级功能、实际应用场景等方面。 安装 安装SQLGlot库非常简单,可以使用pip命令进行安装: pip install sqlglot安装完成后…

Day07 React——第七天 (18新特性 hook)

React 18引入了hooks&#xff0c;这是一种让函数组件拥有类组件的功能的方式。使用hooks&#xff0c;函数组件可以拥有状态管理、生命周期方法、副作用处理等功能&#xff0c;使得函数组件具有了和类组件类似的能力。hooks可以让函数组件更加灵活和易于管理&#xff0c;同时也减…

【中级软件设计师】上午题08-UML(下):序列图、通信图、状态图、活动图、构件图、部署图

上午题08-UML 1 序列图2 通信图3 状态图3.1 状态和活动3.2 转换和事件 4 活动图5 构件图&#xff08;组件图&#xff09;6 部署图 UML图总和 静态建模&#xff1a;类图、对象图、用例图 动态建模&#xff1a;序列图&#xff08;顺序图&#xff0c;时序图&#xff09;、通信图&a…

Python爬虫入门教程!

什么是爬虫? 爬虫就是自动获取网页内容的程序&#xff0c;例如搜索引擎&#xff0c;Google&#xff0c;Baidu 等&#xff0c;每天都运行着庞大的爬虫系统&#xff0c;从全世界的网站中爬虫数据&#xff0c;供用户检索时使用。 爬虫流程 其实把网络爬虫抽象开来看&#xff0c;它…

(十一)PostgreSQL的wal日志

PostgreSQL的wal日志 在 PostgreSQL 中&#xff0c;WAL&#xff08;Write-Ahead Logging&#xff09;日志是一种用于保证数据库事务日志的完整性和数据恢复的机制。WAL 的核心思想是&#xff0c;在对数据库中的数据进行任何修改之前&#xff0c;先将这些修改记录到磁盘上的日志…

数据相关术语、英文翻译以及定义汇总看这里!

随着数字化时代的快速发展&#xff0c;越来越多的小伙伴认识到了数据的作用性。今天我们小编就给大家汇总了部分数据相关术语以及定义&#xff0c;希望对大家有用哦&#xff01; 数据相关术语、英文翻译以及定义汇总看这里&#xff01;&#xff08;来源于网络&#xff0c;仅供参…

LeetCode 349.两个数组的交集(HashSet的使用)

给定两个数组 nums1 和 nums2 &#xff0c;返回 它们的 交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 示例 1&#xff1a; 输入&#xff1a;nums1 [1,2,2,1], nums2 [2,2] 输出&#xff1a;[2]示例 2&#xff1a; 输入&#xff1a;nums1 …

React + Ts + Vite + Antd 项目搭建

1、创建项目 npm create vite 项目名称 选择 react 选择 typescript 关闭严格模式 建议关闭严格模式&#xff0c;因为不能自动检测副作用&#xff0c;有意双重调用。将严格模式注释即可。 2、配置sass npm install sass 更换所有后缀css为sass vite.config.ts中注册全局样式 /…

2023年图灵奖颁发给艾维·维格森(Avi Wigderson),浅谈其计算复杂性理论方面做出的重要贡献

Avi Wigderson是一位以色列计算机科学家&#xff0c;他在计算复杂性理论方面做出了重要的贡献&#xff0c;并对现代计算产生了深远的影响。 Wigderson的主要贡献之一是在证明计算复杂性理论中的基本问题的困难性方面。他证明了许多经典问题的困难性&#xff0c;如图论中的图同构…

LeetCode: 209 长度最小的子数组

209. 长度最小的子数组 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl1, ..., numsr-1, numsr] &#xff0c;并返回其长度。如果不存在符合条件的子数组&#xff0c;返回 0 。 示例 1…

大话数据结构学习笔记-算法

定义 算法是解决特定问题求解步骤的描述&#xff0c;在计算机中表现为指令的有限序列&#xff0c;并且每条指令表示一个或多个操作。 特性 算法具有五个基本特性&#xff1a;输入、输出、有穷性、确定性和可行性。 输入:算法可以具有零个或多个输入 输出:算法至少有一个或…

【QT教程】QT6 Web性能优化

QT6 Web性能优化 使用AI技术辅助生成 QT界面美化视频课程 QT性能优化视频课程 QT原理与源码分析视频课程 QT QML C扩展开发视频课程 免费QT视频课程 您可以看免费1000个QT技术视频 免费QT视频课程 QT统计图和QT数据可视化视频免费看 免费QT视频课程 QT性能优化视频免费看 免费…

vue 常用的日历排班,带农历显示组件(2024-04-16)

显示当前月日历组件&#xff0c;里面带农历或节日显示 后面可以丰富一些国家法定节假期的业务需求 代码 js-calendar.js 文件 var lunarInfo [0x04bd8, 0x04ae0, 0x0a570, 0x054d5, 0x0d260, 0x0d950, 0x16554, 0x056a0, 0x09ad0, 0x055d2, //1900-19090x04ae0, 0x0a5b6, 0…

SEO之搜索引擎的工作原理(三)

初创企业需要建站的朋友看这篇文章&#xff0c;谢谢支持&#xff1a;我给不会敲代码又想搭建网站的人建议 &#xff08;接上一篇。。。&#xff09; 排名 经过搜索引擎蜘蛛抓取页面&#xff0c;索引程序计算得到倒排索引后&#xff0c;搜索引擎就准备好可以随时处理用户搜索了…

故障键盘(Lc2810)——模拟

你的笔记本键盘存在故障&#xff0c;每当你在上面输入字符 i 时&#xff0c;它会反转你所写的字符串。而输入其他字符则可以正常工作。 给你一个下标从 0 开始的字符串 s &#xff0c;请你用故障键盘依次输入每个字符。 返回最终笔记本屏幕上输出的字符串。 示例 1&#xff…

YOLOv8 目标检测项目实操

一 yolov8 背景介绍 YOLOv8是一种尖端的、最先进的(SOTA)模型&#xff0c;建立在以前 YOLO 版本的成功基础上&#xff0c;并引入了新的特性和改进&#xff0c;以进一步提高性能和灵活性。YOLOv8被设计为快速、准确、易于使用&#xff0c;这使它成为一个很好的选择&#xff0c;…

RAG (Retrieval Augmented Generation) 结合 LlamaIndex、Elasticsearch 和 Mistral

作者&#xff1a;Srikanth Manvi 在这篇文章中&#xff0c;我们将讨论如何使用 RAG 技术&#xff08;检索增强生成&#xff09;和 Elasticsearch 作为向量数据库来实现问答体验。我们将使用 LlamaIndex 和本地运行的 Mistral LLM。 在开始之前&#xff0c;我们将先了解一些术…