栈和队列的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 检测是否安装成功&…...
进阶提升!MySQL存储过程、触发器与视图实操指南
前三篇我们依次掌握了MySQL基础CRUD、进阶查询、事务、索引及数据备份,已经能满足日常开发和企业级基础数据操作需求。但在实际工作中,经常会遇到重复执行的SQL操作(如批量处理数据)、需要自动触发的业务逻辑(如数据插…...
告别“恼~”时刻:手把手教你为Qt Kit补全缺失的MSVC编译器
1. 问题现象:当Qt Creator找不到MSVC编译器时 刚安装完Qt Creator,兴冲冲地准备新建项目,却在构建套件(Kit)配置里死活找不到MSVC编译器选项。这个场景我太熟悉了——去年帮团队搭建Qt开发环境时,十个同事里…...
ZYNQ:从分立到融合,揭秘异构计算新范式
1. 从分立到融合:ZYNQ如何解决传统方案的痛点 十年前我第一次接触嵌入式系统设计时,最常见的架构就是ARM处理器外挂FPGA的方案。当时做医疗影像处理项目,主控用的TI的ARM芯片,通过EMIF总线连接Xilinx Spartan-6 FPGA做图像预处理。…...
从混沌到秩序:缠论可视化插件如何重构技术分析思维框架
从混沌到秩序:缠论可视化插件如何重构技术分析思维框架 【免费下载链接】Indicator 通达信缠论可视化分析插件 项目地址: https://gitcode.com/gh_mirrors/ind/Indicator 你是否曾在K线图中迷失方向,面对无数跳动的蜡烛图却难以捕捉市场的真实节奏…...
5分钟图解数码管驱动:从段选码表到位选扫描实战
1. 数码管驱动基础:从LED到数字显示 数码管本质上是一组排列成特定形状的LED灯。每个数码管由8个LED段组成(包括小数点),通过点亮不同段的组合来显示数字或字母。我第一次接触数码管是在大学电子设计课上,当时为了做一…...
python python-semantic-release
# 关于Python Semantic Release的一些个人看法 平时做项目,版本号管理是个挺麻烦的事情。一开始可能觉得简单,手动改改__version__就行,但随着项目规模变大、协作的人变多,这个问题就复杂起来了。什么时候该升主版本号?…...
保姆级避坑指南:Ubuntu 20.04 LTS源码编译Qt 5.15.2全流程
1. 为什么选择源码编译Qt 5.15.2? 在Ubuntu 20.04 LTS上安装Qt通常有两种方式:通过apt安装预编译版本,或者从源码编译安装。源码编译虽然步骤繁琐,但能带来三个关键优势:版本可控(官方仓库的Qt版本往往较旧…...
别再乱用concat了!FFmpeg合并视频文件前必须检查的3个细节(清单编码、路径、Profile)
FFmpeg视频合并避坑指南:3个必须检查的关键细节 第一次用FFmpeg合并视频时,我盯着屏幕上那串"Invalid data found when processing input"错误提示整整半小时。明明只是想把几个会议录像拼在一起,为什么连这么简单的操作都会出错&a…...
SelectDB Enterprise 4.0.5:强化安全与治理,构建企业级实时分析与 AI 数据底座
在实时分析领域,Apache Doris 已经成为一款被广泛采用的开源 OLAP 数据库。凭借高性能查询引擎与一体化架构,Doris 在实时数仓、日志分析等场景中持续发挥重要作用,并在近几个版本中不断向 AI 与搜索能力演进。 在此基础上,Selec…...
从 GPT-6 “Spud“ 闹剧看 AI 圈的信息不对称现象
4月14日,全世界都在等一个不存在的发布会。 一场精心酝酿的"空气发布会" 4月14日那天,科技圈的预期被拉到了顶点,结果却是一场巨大的“鸽子”。这种“什么都没发生”本身,成了当天最值得观察的现象。 事情的起因要追溯…...
