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

2.基本接口
| 函数说明 | 接口说明 |
| stack() | 构造空的栈 |
| empty() | 检测stack |
| size() | 返回stack中的元素个数 |
| top() | 返回栈顶元素的引用 |
| push() | 将元素val压入到stack中 |
| pop() | 将stack中尾部的元素弹出 |
3.stack的模拟实现
stack的实现可以复用适合的容器去实现,由于多种容器都可以实现,在底层使用模板去实现,可以自定义提供具体的容器,也有默认的容器
#pragma once
#include<vector>
#include<list>
#include<iostream>
using namespace std;namespace chk
{template<class T,class Container = vector<T>>class stack{private:Container _con;public:stack(){}bool empty(){return _con.empty();}size_t size(){return _con.size();}const T& top()const{return _con.back();}T& top(){return _con.back();}void push(const T& val){_con.push_back(val);}void pop(){_con.pop_back();}};
二、队列queue
1.介绍
1. 队列是一种容器适配器,专门用于在FIFO上下文(先进先出)中操作,其中从容器一端插入元素,另一端提取元素。
2. 队列作为容器适配器实现,容器适配器即将特定容器类封装作为其底层容器类,queue提供一组特定的成员函数来访问其元素。元素从队尾入队列,从队头出队列。
3. 底层容器可以是标准容器类模板之一,也可以是其他专门设计的容器类。该底层容器应至少支持以下操作:
empty:检测队列是否为空
size:返回队列中有效元素的个数
front:返回队头元素的引用
back:返回队尾元素的引用
push_back:在队列尾部入队列
pop_front:在队列头部出队列
4. 标准容器类deque和list满足了这些要求。默认情况下,如果没有为queue实例化指定容器类,则使用标准容器deque。
2.基本接口
| 函数声明 | 接口说明 |
| queue() | 构造空的队列 |
| empty() | 检测队列是否为空,是返回true,否则返回flase |
| size() | 返回队列中的有效元素个数 |
| front() | 返回队头元素的引用 |
| back() | 返回队尾元素的引用 |
| push() | 在队尾将元素val入队列 |
| pop() | 将队头元素出队列 |
3.queue的模拟实现
思路上就是对其他容器的简单复用即可实现
#include<iostream>
#include<list>
using namespace std;
namespace chk
{template<class T,class Container = list<T>>class queue{private:Container _con;public:queue(){}void push(const T& val){_con.push_back(val);}void pop(){_con.pop_front();}bool empty(){return _con.empty();}size_t size(){return _con.size();}T& front(){return _con.front();}const T& front()const{return _con.front();}T& back(){return _con.back();}const T& back()const{return _con.back();}};
总结
本章整理了栈和队列的内容,在实现上没有多少难度,简单实现一下,加深对其接口的印象,更关键的是适配器的概念,下一章会整理部分与栈和队列相关的OJ题
相关文章:
栈和队列的C++模拟实现
一、栈stack 1.介绍(库里面的文档介绍) 1. stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。 2. stack是作为容器适配器被实现的,容器适配器即是对…...
UE4/5:通过Blender制作BlendShape导入【UE4/5曲线、变形目标,blender形态键】
UE4/5里面,我们经常可以在一些骨骼模型上面看到相关的曲线,如Metahuman里面就是通过这个曲线来改变人物的脸部表情。 而这里笔者将教导如何去制作这种曲线。 这种曲线都是存在于骨骼模型上的,所以我们要么直接制作骨骼模型导入ue࿰…...
微信小程序进阶——后台交互
目录 一、后台准备 1.1 pom.xml 1.2 配置数据源 1.3 整合mybatis 二、前后端交互 2.1 method1 2.2 method2 2.2.1 封装request 2.2.2 头部引用util 2.2.3 编写方法 2.2.4 展示效果 三、WXS的使用 3.1 会议状态 3.1.2 引入wxs 3.1.3 修改代码 3.1.4 展示效果 3…...
二维码智慧门牌管理系统升级解决方案:突破传统,实现质检与抽检的个性化配置
文章目录 前言一、引入“独立质检”二、个性化抽检类别设定三、触发重采要素的功能升级四、升级优势与展望 前言 在数字化时代,智慧门牌管理系统已经成为社会管理的重要工具。为了满足各种复杂需求,系统升级是必然趋势。本次升级主要针对质检和抽检两大…...
《动手学深度学习 Pytorch版》 9.4 双向循环神经网络
之前的序列学习中假设的目标是在给定观测的情况下对下一个输出进行建模,然而也存在需要后文预测前文的情况。 9.4.1 隐马尔可夫模型中的动态规划 数学推导太复杂了,略。 9.4.2 双向模型 双向循环神经网络(bidirectional RNNs)…...
【Axure高保真原型】可视化图表图标
今天和粉丝们免费分享可视化图表图标原型模板,包括柱状图、条形图、环形图、散点图、水波图等常用的可视化图表图标。 【原型效果】 【原型预览】 https://axhub.im/ax9/d402c647c82f9185/#c1 【原型下载】 这个模板可以在 Axure高保真原型哦 小程序里免费下载哦…...
安装mmcv及GPU版本的pytorch及torchvision
一、先装GPU版本的pytorch和torchvision pip install torch1.9.1cu111 torchvision0.10.1cu111 torchaudio0.9.1 -f https://download.pytorch.org/whl/torch_stable.html注意:以上适用cuda11.1版本 如果想离线安装,就看这篇文章 二、安装mmcv 看这篇…...
全国342个城市往返最短通勤时间(铁路)数据
全国342个城市往返最短通勤时间(铁路)数据 1、时间:采集时间是2022年 2、来源:12306 3、数据说明:数据采集12306数据,整理全国342个城市往返最短通勤时间,本数据是铁路包含动车、高铁所有路线…...
AWK语言第二版 第3章.探索性数据分析 3.1泰坦尼克号的沉没
这章也是第一版没有,第二版新增的。 3. 探索性数据分析 上一章给出了一些个人使用的小脚本,通常是特制或专用的。在本章中,我们还会展示Awk在现实中的典型使用场景:使用Awk和其他工具来非正式地探索一些真实的数据,目…...
微信小程序设计之主体文件app-json-window
一、新建一个项目 首先,下载微信小程序开发工具,具体下载方式可以参考文章《微信小程序开发者工具下载》。 然后,注册小程序账号,具体注册方法,可以参考文章《微信小程序个人账号申请和配置详细教程》。 在得到了测…...
WebDAV之π-Disk派盘 + 密码键盘
密码键盘是一款密码管理器,可以存储和管理需要受保护的数据。为方便日常使用,同时也是一款安全输入法,帮您安全便捷地填写账号密码、通用内容、卡包信息。 密码键盘使用军事级的 PBKDF2 有损加密算法保护您的根密码,使用军事级的 AES 加密算法保护您的存储数据。云端再额外…...
LeetCode讲解篇之77. 组合
文章目录 题目描述题解思路题解代码 题目描述 题解思路 遍历nums,让当前数字添加到结果前缀中,递归调用,直到前缀的长度为k,然后将前缀添加到结果集 题解代码 func combine(n int, k int) [][]int {var nums make([]int, n)fo…...
【openwrt学习笔记】Dying Gasp功能和pstore功能的配置(高通 ipq95xx)
目录 一、Dying Gasp信号1.1 概念1.2 实现原理 二、pstore 功能2.1 概念2.2 实现原理 三、openwrt中开启pstore功能3.1 软硬件参数3.2 各文件修改3.2.1 defconfig3.2.2 dts(ipq9574-default-memory.dtsi)3.2.3 fs/pstore/ram.c 四、测试4.1 挂载4.2 触发命令和效果 参考资料&am…...
使用RestSharp和C#编写程序
以下是一个使用RestSharp和C#编写的爬虫程序,用于爬取www.zhihu.com上的视频。此程序使用了https://www.duoip.cn/get_proxy来获取代理IP。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks…...
Leetcode 2911. Minimum Changes to Make K Semi-palindromes
Leetcode 2911. Minimum Changes to Make K Semi-palindromes 1. 解题思路2. 代码实现 题目链接:2911. Minimum Changes to Make K Semi-palindromes 1. 解题思路 这一题属实也是把我坑惨了…… 坦率地说,这道题本身并没有啥难度,但是坑爹…...
Node学习笔记之包管理工具
一、概念介绍 1.1 包是什么 『包』英文单词是package ,代表了一组特定功能的源码集合 1.2 包管理工具 管理『包』的应用软件,可以对「包」进行 下载安装 , 更新 , 删除 , 上传 等操作 借助包管理工具,可…...
分发糖果[困难]
优质博文:IT-BLOG-CN 一、题目 n个孩子站成一排。给你一个整数数组ratings表示每个孩子的评分。你需要按照以下要求,给这些孩子分发糖果: 【1】每个孩子至少分配到1个糖果。 【2】相邻两个孩子评分更高的孩子会获得更多的糖果。 请你给每个孩…...
Java验证邮箱格式是否正确的正则表达式
Java验证邮箱格式是否正确的正则表达式 import java.util.regex.Pattern;public class EmailUtil {final static Pattern partern Pattern.compile("[a-zA-Z0-9][\\.]{0,1}[a-zA-Z0-9][a-zA-Z0-9]\\.[a-zA-Z]");/*** 验证输入的邮箱格式是否符合* param email* ret…...
快速排序原理JAVA和Scala实现-函数式编程的简洁演示
快速排序原理JAVA和Scala实现-函数式编程的简洁演示 目录 快速排序原理JAVA和Scala实现-函数式编程的简洁演示 C语言快速排序实现 Java 快速排序实现 Scala 快速排序实现 本文章向大家介绍快速排序原理JAVA和Scala实现-函数式编程的简洁演示,主要内容包括C语言…...
如何在linux服务器上安装Anaconda与pytorch
如何在linux服务器上安装Anaconda与pytorch 1,安装anaconda1.1 下载anaconda安装包1.2 安装anaconda1.3 设计环境变量1.4 安装完成验证 2 Anaconda安装pytorch2.1 创建虚拟环境2.2 查看现存环境2.3 激活环境2.4 选择合适的pytorch版本下载2.5 检测是否安装成功&…...
从理论到实践:伺服三环控制的参数整定与Simulink仿真指南
1. 伺服三环控制的核心原理 伺服系统的三环控制结构就像洋葱一样层层嵌套,最内层是电流环,中间是速度环,最外层是位置环。这种分层设计让每个环节都能专注于自己的控制目标,内环为外环提供支撑。我调试过几十台不同品牌的伺服系统…...
Floccus实现跨浏览器书签同步
1. 关于Floccus Floccus是一款浏览器插件, 依赖Nextcloud,坚果云或者Google Drive等云端存储实现不同浏览器之间的书签同步 官网地址: https://floccus.org Github地址: https://github.com/floccusaddon/floccus 2. 云盘选择 Nextcloud(自行搭建), 坚果云(支持WebDAV 协议)…...
告别手动记录!用CAPL脚本的file函数实现CANoe测试数据自动归档
告别手动记录!用CAPL脚本的file函数实现CANoe测试数据自动归档 在汽车电子测试领域,工程师们每天都要处理海量的总线信号、故障码和测试结果数据。传统的手动记录方式不仅效率低下,还容易引入人为错误。想象一下,在连续8小时的耐久…...
Nanbeige 4.1-3B Streamlit UI实操手册:自定义背景色与气泡样式的修改方法
Nanbeige 4.1-3B Streamlit UI实操手册:自定义背景色与气泡样式的修改方法 1. 引言:从“能用”到“好看”的界面定制 如果你已经体验过Nanbeige 4.1-3B Streamlit WebUI,第一印象可能是“清爽”、“现代”。它确实打破了Streamlit原生界面的…...
2025必备!5款免费AI论文检测工具实测,低查重高原创一站搞定
本文整理了目前学术场景下实用性拉满的AI论文辅助工具,覆盖AIGC检测、降重、降AI率全流程需求,帮你轻松应对论文查重与AI检测双重关卡。 在学术研究与论文写作过程中,内容原创性、无抄袭风险是最基础的要求。近年来随着AI写作工具的普及&…...
典型相关分析(CCA)在多元数据融合与故障诊断中的实战应用与Python/Matlab实现
1. 典型相关分析(CCA)是什么?能解决什么问题? 典型相关分析(Canonical Correlation Analysis,简称CCA)是一种用于分析两组变量之间关系的多元统计方法。简单来说,它就像是一位擅长牵…...
【优化位置】基于matlab配电系统中电容的最佳位置(降低损耗和电压改善)【含Matlab源码 15346期】
💥💥💥💥💥💥💞💞💞💞💞💞💞💞欢迎来到海神之光博客之家💞💞💞Ὁ…...
2025最权威的AI论文工具推荐榜单
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 针对知网AI检测系统的降重需求,实现可通过以下技术路径:首先…...
小程序渗透干货、常见登录绕过Web接口速通与挖掘思路
0x01 简介小程序作为高频业务入口,常因接口鉴权缺失、弱口令泛滥、Swagger 文档泄露等问题暗藏安全隐患。本文结合真实渗透案例,梳理小程序 Web 接口速通技巧,从弱口令登录突破、模糊查询信息泄露,到参数越权、未授权访问挖掘&…...
[实战指南] 彻底清理CUDA环境:解决bitsandbytes安装冲突的终极方案
1. 为什么你的bitsandbytes总是安装失败? 每次看到那个红色的RuntimeError: CUDA Setup failed报错,我都想砸键盘。这玩意儿就像个顽固的牛皮癣,明明GPU就在那里躺着,CUDA也装得好好的,可bitsandbytes就是死活认不出来…...
