c++stack和list 介绍

news2024/12/24 21:52:23

stack介绍

堆栈是一种容器适配器,专门设计用于在 LIFO 上下文(后进先出)中运行,其中元素仅从容器的一端插入和提取。
堆栈作为容器适配器实现,容器适配器是使用特定容器类的封装对象作为其基础容器 的类,提供一组特定的成员函数来访问其元素。元素从特定容器的 “back” 推送弹出,这称为堆栈的顶部

stack接口

stack() 构造空的栈

empty() 检测stack是否为空

size() 返回stack中元素的个数

top() 返回栈顶元素的引用

push() 将元素val压入stack中

pop() 将stack中尾部的元素弹出

stack的模拟实现

在c++中,模拟实现stack较C语言简单许多,因为库里提供了vector和list的接口,实现起来少了很多复杂的步骤

在模拟实现的过程中可以使用模板类,能够应对不同类型的数据

template<class T,class Con=deque<T>>

这里我们在创建模板的时候使用两个类型,T代表了数据的类型,Con为实现的方式,默认传参为deque。

Con _c;

这是类中的变量,_c的类型有几种可能:vector,list,deque。

插入 

void push(const T& x)
{
	_c.push_back(x);
}

这里我使用头部为栈底,实现的时候只需要调用库里的尾插函数即可。

删除

void pop()
{
	_c.pop_back();
}

这里我们直接使用尾删函数即可。

取栈顶数据

T& top()
{
	return _c[_c.size() - 1];
}

直接返回size前一个位置的数据即是栈顶数据。

数据个数

size_t size()const
{
	return _c.size();
}

直接调用_c的size接口即可完成。

判空

bool empty() const
{
	return _con.empty();
}

调用_c的判空接口。

queue介绍

1. 队列是一种容器适配器,专门用于在FIFO上下文(先进先出)中操作,其中从容器一端插入元 素,另一端提取元素。

2. 队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类,queue提供 一组特定的成员函数来访问其元素。元素从队尾入队列,从队头出队列。

queue接口

queue() 构造空的队列

empty() 检测队列是否为空,是返回true,否则返回false

size() 返回队列中有效元素的个数

front() 返回队头元素的引用

back() 返回队尾元素的引用

push() 在队尾将元素val入队列

pop() 将队头元素出队列

queue模拟实现

因为queue的接口中存在头删和尾插,因此使用vector来封装效率太低,故可以借助list来模拟实现queue。

实现过程也与stack差不多,借用库函数可以省去很多时间。

template<class T,class con=deque<T>>

这里的con默认使用deque,同样也可以使用list。

判空

bool empty()
{
	return _c.size() == 0;
}

数据个数

size_t size()
{
	return _c.size();
}

队头数据

const T& front() const
{
	return _c[_c.size() - 1];
}

队尾数据

const T& back()const
{
	return _c[0];
}

插入

void push(const T& x)
{
	_c.push_front(x);
}

删除

void pop()
{
	_c.pop_back();
}

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

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

相关文章

mysql可重复读不能解决幻读吗?

1、可重复读和幻读的概念 1.1、可重复读 可重复读是数据库的四个隔离级别之一,可重复读可以保证在一个事物之内读取到的数据永远是相同的(通过mvcc表快照实现的),哪怕这期间有其它事务对数据做了修改,也不会影响当前事务的查询。 1.2、幻读 网上有不少博客说:幻读是一个事物内…

正规表达式例题

解析&#xff1a;从题意可知&#xff0c;a可以有零个或多个&#xff0c;b有1个或多个 选项A&#xff1a;这里a至少有1个&#xff0c;不符合题意 选项B&#xff1a;a^*bb^*&#xff0c;a是0个或多个&#xff0c;b可以是1个或多个&#xff0c;符合题意 选项C和选项D&#xff0…

Jenkins 通过 Version Number Plugin 自动生成和管理构建的版本号

步骤 1&#xff1a;安装 Version Number Plugin 登录 Jenkins 的管理界面。进入 “Manage Jenkins” -> “Manage Plugins”。在 “Available” 选项卡中搜索 “Version Number Plugin”。选中并安装插件&#xff0c;完成后可能需要重启 Jenkins。 步骤 2&#xff1a;配置…

尚品汇-支付宝下单接口显示二维码实现(四十六)

目录&#xff1a; &#xff08;1&#xff09;支付功能实现 &#xff08;2&#xff09;保存支付信息 &#xff08;3&#xff09;编写支付宝支付接口 &#xff08;1&#xff09;支付功能实现 支付宝有了同步通知为什么还需要异步通知&#xff1f; 同步回调两个作用 第一是从支付…

密保管家-随机密码本地生成

下载 简介 安全无忧:采用先进的加密算法,确保您的密码安全不外泄。 随机性强:每次生成的密码都是完全随机的,避免模式化,增加破解难度。 易于管理:简洁的界面设计让您轻松管理所有账号的密码。 独立运行:无需网络连接,所有数据本地存储,保护隐私的同时提供便捷的密…

【MATLAB】模拟退火算法

模拟退火算法的MATLAB实现 模拟退火算法简介模拟退火算法应用实例关于计算结果 模拟退火算法简介 1982年&#xff0c;Kirkpatrick 将退火思想引入组合优化领域&#xff0c;提出了一种能够有效解决大规模组合优化问题的算法&#xff0c;尤其对 NP 完全问题表现出显著优势。模拟…

FreeRTOS 优先级翻转以及互斥信号量

优先级翻转&#xff1a; 高优先级的任务反而慢执行&#xff0c;低优先级的任务反而优先执行 优先级翻转在抢占式内核中是非常常见的&#xff0c;但是在实时操作系统中是不允许出现优先级翻转的&#xff0c;因为优先级翻转会破坏任务的预期顺序&#xff0c;可能会导致未知的严重…

react | 自学笔记 | 持续更新

React自学速学笔记 数据单向流动事件为什么上述例子&#xff0c;是onClick{()>shoot("goal!")}而不是onClick{shoot("goal")}?event对象 条件渲染if方法&&?: 三元表达式 纯小白自学笔记&#xff0c;有不对的欢迎指正。 数据单向流动 单向流动…

如何确保光伏电站EPC施工的质量

说到保证EPC施工的质量&#xff0c;我们得先了解什么是EPC施工&#xff0c;是指&#xff1a;指总承包商按照合同约定&#xff0c;承担工程项目的设计、采购、施工等工作&#xff0c;并对工程的质量、安全、工期和造价全面负责。 EPC施工还有几个特点&#xff1a; 一体化服务&…

单片机毕业设计基于stm32的蔬菜大棚智能监控系统设计

文章目录 前言资料获取设计介绍功能介绍程序代码部分参考 设计清单具体实现截图参考文献设计获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师&#xff0c;一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP…

2.2.3 UDP的可靠传输协议QUIC 2

udp可靠传输 kcp协议 网络通畅下&#xff0c;kcp比tcp慢 这里直接看课件图片&#xff0c; 延迟ack比非延迟减少应答包数量&#xff0c;但是慢 kcp 讲解 kan代码ikcp.c 按照readme指南编译一下&#xff01;&#xff01; mkdir build cd build cmake .. make第一遍报错&#xf…

ant-design-vue中实现a-tree树形控件父子关联选中过滤的算法

在使用ant-design-vue的框架时&#xff0c;a-tree是比较常用的组件&#xff0c;比较适合处理树形结构的数据。 但是在与后台数据进行授权交互时&#xff0c;就不友好了。 在原生官方文档的例子中&#xff0c;若子项被勾选&#xff0c;则父级节点会被关联勾选&#xff0c;但这勾…

【堆的应用--C语言版】

前面一节我们都已将堆的结构&#xff08;顺序存储&#xff09;已经实现&#xff0c;对树的相关概念以及知识做了一定的了解。其中我们在实现删除操作和插入操作的时候&#xff0c;我们还同时实现了建大堆&#xff08;小堆&#xff09;的向上&#xff08;下&#xff09;调整算法…

【CSS in Depth 2 精译_024】4.2 弹性子元素的大小

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第一章 层叠、优先级与继承&#xff08;已完结&#xff09; 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位&#xff08;已完结&#xff09; 2.1 相对…

PyInstaller问题解决 onnxruntime-gpu 使用GPU和CUDA加速模型推理

前言 在模型推理时&#xff0c;需要使用GPU加速&#xff0c;相关的CUDA和CUDNN安装好后&#xff0c;通过onnxruntime-gpu实现。 直接运行python程序是正常使用GPU的&#xff0c;如果使用PyInstaller将.py文件打包为.exe&#xff0c;发现只能使用CPU推理了。 本文分析这个问题…

TL-Tomcat中长连接的底层源码原理实现

长连接&#xff1a;浏览器告诉tomcat不要将请求关掉。 如果不是长连接&#xff0c;tomcat响应后会告诉浏览器把这个连接关掉。 tomcat中有一个缓冲区 如果发送大批量数据后 又不处理 那么会堆积缓冲区 后面的请求会越来越慢。

Java架构师未来篇大模型

目录 1. 大模型的定义2 大模型相关概念区分3 大模型的发展历程4. 大模型的特点5 大模型的分类6 大模型的泛化与微调7 大模型岗位需求8 理解大模型8.1 生活中的比喻8.2 大模型的定义9 大模型工作9.1 数据的积累9.2 模型的训练9.3 预测和应用10 大模型的实际应用10.1 语言处理10.…

240907-Gradio插入Mermaid流程图并自适应浏览器高度

A. 最终效果 B. 示例代码 import gradio as grmermaid_code """ <iframe srcdoc <!DOCTYPE html> <html><head><meta charset"utf-8" /><meta name"viewport" content"widthdevice-width" />…

C++初阶:STL详解(一)——string类

✨✨小新课堂开课了&#xff0c;欢迎欢迎~✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;C&#xff1a;由浅入深篇 小新的主页&#xff1a;编程版小新-CSDN博客 1.为什么会有string类 C 语言中&#xff0c…

Nodejs中使用Minio

Minio 安装Minio MinIO下载 下载完&#xff0c;服务端和客户端后&#xff0c;最好像我这样做&#xff0c;去分一下路径。 安装完后&#xff0c;进入bin目录输入以下指令&#xff1a; # 设置账户 setx MINIO_ROOT_USER admin# 设置密码 setx MINIO_ROOT_PASSWORD password# …