C++ STL--->stack和queue

文章目录

  • stack
    • stack实现
    • 参考源码
  • queue
    • queue实现
    • 参考源码

stack

stack文档

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

image.png
栈就是一种特殊的vector ,使用vector实现栈的后进先出的特点即可。

stack实现

namespace ding
{template<class T, class Container = vector<T>>class stack{public://构造函数等都不需实现,调用容器的构造即可void push(const T& x){_con.push_back(x);}T top(){return _con.back();}void pop(){_con.pop_back();}bool empty(){return _con.empty();}size_t szie(){return _con.size();}private:Container _con;};
}

参考源码

  • gitee STL_stack的模拟实现

queue

queue文档

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

image.png

queue实现

#include <iostream>
#include <list>
namespace ding
{template<class T, class Container = std::list<T>>class queue{public://入队列从尾部入void push(const T& val){_con.push_bakc(val);}//出队列从头部出void pop(){_con.pop_front();}bool empty(){_con.empty();}size_t size(){return _con.size();}T& front(){return _con.front();}T& back(){return _con.back();}private:Container _con;};
}

使用不同得底层容器 实现不同物理结构得队列

  • ding::queue<int,std::vector<int>> q1;//顺序队列
    image.png
  • ding::queue<int,std::list<int>> q2;//链式队列

image.png

参考源码

  • giteeSTL—队列模拟实现

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

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

相关文章

什么是Nginx

概念 Nginx (engine x)是一个高性能的HTTP和反向代理web服务器同时也提供IMAP/POP3/SMTP服务 主要功能反向代理 通过配置文件可以实现集群和负载均衡 静态资源虚拟化 图解 常见服务器 apache 超过百万并发后性能下降 nginx 操作简单支持并发量大 什么是代理 代理简单来说&a…

html+css 浮动、清除浮动、什么是BFC?、如何开启BFC

浮动 介绍&#xff1a; 其实早期的浮动是用来文字环绕图片效果,但是后来发现浮动还可以设置页面布局问题 块元素在文档流中默认垂直排列&#xff0c;如果希望块元素在页面中水平排列&#xff0c;可以使块元素脱离文档流 特点&#xff1a; 哪个元素设置浮动&#xff0c;哪个…

VUE3,自定义控制keep-alive缓存

安装插件 npm install vite-plugin-vue-setup-extend --save 在vite.config.ts中 import VueSetupExtend from vite-plugin-vue-setup-extend ..... plugins&#xff1a;[ vue(), VueSetupExtend(), ..... ] useKeepalive.ts import { ref } from "vue" export const…

win10系统postgresql重装软件后原数据如何迁移

1、备份postgresql安装目录下的data文件夹 2、重新安装postgresql同一版本的软件 3、停止postgresql-x64-12服务 4、替换data文件夹 删除postgresql安装后新的的data文件夹 删除后将第一步备份的data文件夹粘贴过来&#xff0c;还是同一位置 5、启动postgresql-x64-12服务 …

树莓派调用usb摄像头(三)

查看是否检索到摄像头 因为我的摄像头是usb 的所以使用一下命令查看摄像头 安装fswebcam sudo apt-get install fswebcam输入以下命令&#xff0c;开启摄像头 fswebcam --no-banner -r 640x480 image3.jpg sudo apt-get install cmake libjpeg8-dev 提示&#xff1a;Packag…

配置dns主从服务器,能够实现正常的正反向解析

一.DNS域名服务器原理及作用等介绍 1.DNS简介&#xff1a; DNS是互联网上的一项服务&#xff0c;担任域名和IP地址相互映射的一个分布式数据库&#xff0c;相较于IP&#xff0c;域名更便于记忆能够使人更方便的访问互联网。但是计算机只能基于IP来识别对方&#xff0c;而且要上…

vue3+ts+vite配置项目引入@surely-vue/table less报错

在项目当中报错Inline JavaScript is not enabled. Is it set in your options? 修改配置如下&#xff1a; return {css: {preprocessorOptions: {less: {javascriptEnabled: true //开启less编译&#xff0c;注意&#xff1a;这个很重要}}},}

怿星科技测试实验室获CNAS实验室认可,汽车以太网检测能力达国际标准

2023年12月27日&#xff0c;上海怿星电子科技有限公司测试实验室&#xff08;下称&#xff1a;EPT LABS&#xff09;通过CNAS实验室认可批准&#xff0c;并于2024年1月5日正式取得CNAS实验室认可证书&#xff08;注册号CNAS L19826&#xff09;&#xff0c;标志着怿星科技的实验…

mysql group_concat函数使用

CREATE TABLE aa (id int(11) DEFAULT NULL,name varchar(50) DEFAULT NULL ) ENGINEInnoDB DEFAULT CHARSETutf8mb41、基本查询 SELECT * FROM aa;2、以id分组&#xff0c;把name字段的值打印在一行&#xff0c;逗号分隔(默认) select id,group_concat(name) from aa group …

mac pro “RESP.app”意外退出 redis desktop manager

文章目录 redis desktop manager下载地址提示程序含有恶意代码“RESP.app”意外退出解决办法&#xff1a;下载python3.10.并安装重新打开RESP如果还是不行&#xff0c;那么需要替换错误路径&#xff08;我的没用&#xff09;外传 最近在研究redis的消息&#xff0c;看到了strea…

iOS UI掉帧和卡顿优化解决方案记录

UI卡顿原理 在 VSync 信号到来后&#xff0c;系统图形服务会通过 CADisplayLink 等机制通知 App&#xff0c;App 主线程开始在 CPU 中计算显示内容&#xff0c;比如视图的创建、布局计算、图片解码、文本绘制等。随后 CPU 会将计算好的内容提交到 GPU 去&#xff0c;由 GPU 进行…

vba设置excel单元格背景色

vba设置excel单元格背景色位蓝色 Sheet1.Cells(hang, 2).Interior.Color RGB(0, 0, 255) 参考链接 【VBA】给单元格设置背景色_vba 将一行底色置绿色-CSDN博客https://blog.csdn.net/s_h_m114_2/article/details/105787093 参考2 知乎 VBA--单元格的背景色设置 特此…

一文读懂【北交所】开通条件及交易规则!

近期市场持续萎靡不振&#xff0c;北交所却在大涨调整后&#xff0c;还能继续拉升&#xff0c;前些天还打起了“麻将”&#xff0c;“东南西北中”花式齐飞。这带给投资者朋友们极大的信心&#xff01;那么有些朋友还没有跟上吃肉&#xff0c;还不了解什么是北交所&#xff1f;…

GitLab Runner 实现项目 CI/CD 发布

Gitlab Runner简介 Gitlab实现CICD的方式有很多&#xff0c;比如通过Jenkins&#xff0c;通过Gitlab Runner等&#xff0c;今天主要介绍后者。Gitlab在安装的时候&#xff0c;就默认包含了Gitlab CI的能力&#xff0c;但是该能力只是用于协调作业&#xff0c;并不能真的去执行…

如何使用Docker一键部署WBO白板并实现固定公网地址远程访问

文章目录 前言1. 部署WBO白板2. 本地访问WBO白板3. Linux 安装cpolar4. 配置WBO公网访问地址5. 公网远程访问WBO白板6. 固定WBO白板公网地址 前言 WBO在线协作白板是一个自由和开源的在线协作白板&#xff0c;允许多个用户同时在一个虚拟的大型白板上画图。该白板对所有线上用…

在线项目实习|2024寒假项目实战火热报名中!

一、在线实习项目分类 二、在线实习项目流程 三、在线实习项目优惠及项目特色 1、师傅带练教学模式&#xff0c;手把手教你掌握 采用“师带徒”的教学模式&#xff0c;课程以“项目前置知识学习 师傅带练 项目实战”贯穿&#xff0c;强调动手实操&#xff0c;内容以代码落地为…

cellchat安装

官方安装文档&#xff1a; GitHub - jinworks/CellChat: R toolkit for inference, visualization and analysis of cell-cell communication from single-cell and spatially resolved transcriptomics 我安装过的命令&#xff1a; install.packages(NMF) devtools::instal…

python的random模块

random模块是Python中用于生成伪随机数的模块。它提供了一系列的函数和类&#xff0c;可以用于生成随机数、随机选择和随机排列等操作。以下是一些常用的random模块函数和类的示例用法&#xff1a; random.random()&#xff1a;生成一个0到1之间的随机浮点数。 import random…

Linux中安装字体

问题说明 wps 安装后打开文件部分字体出现乱码&#xff0c;原因主要是linux中缺少windows中的相关字体&#xff0c;只要从windows电脑中的字体拷贝到linux系统中并安装就能解决问题 对ubuntu 和manjora有效。 安装字体 字体下载地址可参考附录 在 Linux 中&#xff0c;一次…