【c++】栈(satck)和队列(queue)

目录

一、stack

1.stack的介绍

2.stack的使用

3.stack的模拟实现

二、queue

1.queue的介绍

2.queue的使用

3.queue的模拟实现

三、priority_queue

1.priority_queue的介绍

2.priority_queue的使用


一、stack

1.stack的介绍

        (1)stack是一种容器适配器,专门用在具有后进先出操作的环境中,stack只能从容器的一端进行插入与删除操作。

        (2)stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为作为其底层容器,并提供一组特定的成员函数来访问其元素。

        (3)stack的底层容器可以使任何标准的容器类模板。这些容器类需要支持以下操作:empty()、back()、push_back()、pop_back()等。

        (4)标准容器vector、deque、list均符合上面需求,默认情况下stack的底层容器是deque。

2.stack的使用

//stack的使用:最小栈
class MinStack
{
public:void push(int x){//只要有元素压栈,首先将元素保存到_elem中_elem.push(x);//如果x小于等于_min中栈顶的元素,则也要将x压栈到_min中if (_min.empty() || _min.top() <= x){_min.push(x);}}void pop(){//如果_min栈顶元素等于_elem栈顶元素,则删除_elem栈顶元素的同时也要删除_min栈顶元素if (_elem.top() == _min.top()){_min.pop();}_elem.pop();}int top(){return _elem.top();}int getMin(){return _min.top();}
private://保存栈中的元素std::stack<int> _elem;//保存栈的最小值std::stack<int> _min;
};

3.stack的模拟实现

        以vector为底层容器模拟实现stack:

namespace lbj
{//以vector为底层容器模拟实现stacktemplate <class T>class stack{public:stack() {}void push(const T& x){_s.push_back(x);}void pop(){_s.pop_back();}T& top(){return _s.back();}const T& top()const{return _s.back();}size_t size()const{return _s.size();}bool empty()const{return _s.empty();}private:std::vector<T> _s;};
}

二、queue

1.queue的介绍

        (1)queue是一种专门用于上下文先进先出操作的容器适配器,即支持push_back()和pop_back();

        (2)queue的底层容器可以是标准容器类模板之一,也可以是其他专门设计的容器,但是底层容器都需要支持以下操作:empty()、size()、front()、back()、push_back()、pop_front()等;

        (3)标准容器类deque和list满足了上述要求。默认情况下使用标准容器deque作为queue的底层容器

2.queue的使用

3.queue的模拟实现

        以list为底层容器模拟实现queue:

namespace lbj
{//以list为底层容器模拟实现queue:template <class T>class queue{public:queue(){}void push(const T& x){_q.push_back(x);}void pop(){_q.pop_front();}T& front(){return _q.front();}const T& front()const{return _q.front();}T& back(){return _q.back();}const T& back()const{return _q.back();}size_t size(){return _q.size();}bool empty(){return _q.empty();}private:std::list<T> _q;};
}

三、priority_queue

1.priority_queue的介绍

        (1)priority_queue(优先级队列)是一容器适配器,根据严格的弱排序标准,默认情况下它的第一个元素是它所包含元素中最大的;

        (2)优先级队列的上下文类似于堆,在堆中可以随时插入元素,并且只能检索最大堆元素(优先级队列中位于开头位置的元素)

        (3)priority_queue的底层容器可以是任何标准容器类模板,也可以是其他特定设计的容器类。只要容器可以通过随机访问迭代器进行访问,并支持以下操作:empty()、size()、front()、push_back()、pop_back()等;

        (4)标准容器类vector和deque均满足上述要求,没有指定的情况下默认使用vector作为priority_queue的底层容器。

2.priority_queue的使用

        priority_queue默认使用vector作为其底层容器,在vector上又使用了堆算法将vector中的元素构造成堆的结构,因此priority_queue就是堆,所有需要用到堆的位置,都可以考虑使用priority_queue。注意:默认情况下priority_queue是大堆。

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

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

相关文章

kotlin 和 java 的区别

一、什么是kotlin&#xff1f; Kotlin&#xff08;科特林&#xff09;是一个用于现代多平台应用的静态编程语言&#xff0c;由 JetBrains 开发。Kotlin可以编译成Java字节码&#xff0c;也可以编译成JavaScript&#xff0c;方便在没有JVM的设备上运行。除此之外Kotlin还可以编…

pytest -- 基本使用详解

1. pytest基本介绍 pytest 是一个功能强大且易于使用的 Python 测试框架&#xff0c;用于编写单元测试、集成测试和功能测试。 它提供了丰富的功能和灵活的用法&#xff0c;使得编写和运行测试变得简单而高效。 --------------->>>>> pytest框架优点&#xff1a…

Git中config配置

文章目录 简介一、config级别二、config基本配置 简介 Git是一个开源的分布式版本控制系统&#xff0c;用于处理各种规模的项目版本管理。它由Linus Torvalds设计&#xff0c;主要用于Linux内核开发。Git的特点包括速度、简单的设计、对非线性开发模式的支持、完全的分布式能力…

springboot(ssm仓库管理系统 wms智能仓储管理系统Java系统

springboot(ssm仓库管理系统 wms智能仓储管理系统Java系统 开发语言&#xff1a;Java 框架&#xff1a;ssm/springboot vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服务器&#xff1a;tomcat 数据库&#xff1a;mysql 5.7&#xff08;或8.0&#xff09; …

企业怎么传输大容量视频?

在企业中&#xff0c;视频的应用越来越广泛&#xff0c;不论是在内部沟通、培训、宣传&#xff0c;还是在外部合作、推广、展示方面&#xff0c;视频都扮演着不可或缺的角色。然而&#xff0c;由于视频文件通常较大&#xff0c;传输时往往会面临网速慢、容量限制、安全风险等问…

flutter 五点一:MaterialApp Theme

ThemeData factory ThemeData({bool? applyElevationOverlayColor, //material2的darkTheme下 增加一个半透明遮罩 来凸显阴影效果 material3下无效 貌似没啥用NoDefaultCupertinoThemeData? cupertinoOverrideTheme, //ios组件样式 Iterable<ThemeExtension<dyn…

【Java基础_01】Java运行机制及运行过程

【Java基础_01】Java运行机制及运行过程 文章目录 【Java基础_01】Java运行机制及运行过程1.Java 运行机制及运行过程1.1 Java 核心机制-Java 虚拟机 [JVM java virtual machine] 1.2 JDK&#xff0c;JRE1.3 JVM,JDK和JRE1.4 环境变量path1.4.1 为什么要配置path1.4.2 配置环…

C++中的三元运算符(也称为条件运算符)是一种简洁的语法,用于基于一个布尔条件表达式选择两个值中的一个。

文章目录 用法举例&#xff1a;另一个例子&#xff1a;注意事项&#xff1a; C中的三元运算符&#xff08;也称为条件运算符&#xff09;是一种简洁的语法&#xff0c;用于基于一个布尔条件表达式选择两个值中的一个。三元运算符的一般形式是&#xff1a; condition ? expr1 :…

集中常见的排序方法Go语言版本实现

简单排序&#xff1a;插入排序、选择排序、 冒泡排序 分治排序&#xff1a;快速排序、归并排序 分配排序&#xff1a;桶排序、基数排序 树状排序&#xff1a;堆排序 其他&#xff1a;计数排序、希尔排序 稳定排序&#xff1a;如果 a 原本在 b 的前面&#xff0c;且 a b&#x…

Mesh自组网通信技术概述

Mesh自组网核心技术 Mesh自组网&#xff08;Mesh Networking&#xff09;是一种网络技术&#xff0c;主要用于在多个节点之间建立动态的、自我管理的网络连接。这种技术的核心在于其自我组织和自我修复的能力&#xff0c;使得网络能够在节点移动或节点故障时自动调整。以下是Me…

2024.1.17 用户画像day02 - Elastic Search

目录 ES和数据库的类比 ELK集中日志协议栈介绍 ES的介绍 ES的架构 ES中的名词 ES中的角色 分片与副本的区别在于: MYSQL分库与分表: 倒排序索引: ES写入数据原理: ES读取、检索数据原理: 重点: ES 的架构 , ES读写的原理 ES和数据库的类比 关系型数据库非关系型数…

mysql进阶-索引进阶

目录 1. 索引的相关语法 1.1 创建索引&#xff1a; 1.2 删除索引&#xff1a; 1.3 其他修改或创建方法&#xff1a; 2. 索引创建分类 2.1 索引类型 2.2 索引方法 2.3 索引分类 3. 索引原则 3.1 覆盖索引 3.2 最左前缀原则 3.3 索引下推(index condition pushdown) …

C++发展史

目录 什么是C C的发展史 C的重要性 C在实际工作中的应用 “21天教你学会C” 什么是C 先看看祖师爷&#xff0c;记得多拜拜&#x1f92d; C语言是结构化和模块化的语言&#xff0c;适合处理较小规模的程序。对于复杂的问题&#xff0c;规模较大的 程序&#xff0c;需要高度…

逻辑卷管理、逻辑卷扩展、文件系统刷新、逻辑卷删除、VDO、RAID磁盘阵列、查看进程命令、进程控制、进程管理

1 打开虚拟机 2 环境准备&#xff1a;添加一块新的80G硬盘 [rootlocalhost ~]# lsblk 80G硬盘进行&#xff08;MBR分区模式&#xff09;规划分区 划分3个10G的主分区;2个20G的逻辑分区 [rootlocalhost ~]# fdisk /dev/vdb n 创建主分区--->回车--->回车--->回车…

Vue3 + Electron框架读取程序外部配置文件

网上找了一堆都不行&#xff0c;根据这个步骤来肯定能用 1. 在项目下新建一个config.json文件 2. json文件中写入一些配置 3. vue.config.js中配置打包时把config.json文件copy到应用目录下 pluginOptions:{electronBuilder:{nodeIntegration:true,builderOptions: {extraReso…

MySQL表的基本插入查询操作详解

博学而笃志&#xff0c;切问而近思 文章目录 插入插入更新 替换查询全列查询指定列查询查询字段为表达式查询结果指定别名查询结果去重 WHERE 条件基本比较逻辑运算符使用LIKE进行模糊匹配使用IN进行多个值匹配 排序筛选分页结果更新数据删除数据截断表聚合函数COUNTSUMAVGMAXM…

怎样实现安全便捷的网间数据安全交换?

数据安全交换是指在数据传输过程中采取一系列措施来保护数据的完整性、机密性和可用性。网间数据安全交换&#xff0c;则是需要进行跨网络、跨网段甚至跨组织地进行数据交互&#xff0c;对于数据的传输要求会更高。 大部分企业都是通过网闸、DMZ区、VLAN、双网云桌面等方式实现…

2024美赛数学建模思路 - 案例:ID3-决策树分类算法

文章目录 0 赛题思路1 算法介绍2 FP树表示法3 构建FP树4 实现代码 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 算法介绍 FP-Tree算法全称是FrequentPattern Tree算法&#xff0c;就是频繁模…

redis数据安全(一)数据持久化

一、Redis数据安全措施: 1、将数据持久化至硬盘 2、将数据复制至其他机器&#xff1b; 复制是在数据持久化的基础上进行的。 二、将数据持久化至硬盘 1、介绍&#xff1a;Redis是一个基于内存的数据库&#xff0c;它的数据是存放在内存中&#xff0c;内存有个问题就是关闭…

Python中使用HTTP代理进行网络请求

在Python中&#xff0c;HTTP代理是一种常用的技术&#xff0c;用于控制和修改HTTP请求和响应。通过使用HTTP代理&#xff0c;我们可以更好地控制网络请求的行为&#xff0c;提高安全性、隐私性和效率。下面我们将详细介绍如何在Python中使用HTTP代理进行网络请求。 一、HTTP代…