【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.hqwc.cn/news/411371.html

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

相关文章

服务器推送数据你还在用 WebSocket么?

当涉及到推送数据时,人们首先会想到 WebSocket。 的确,WebSocket 允许双向通信,可以自然地用于服务器到浏览器的消息推送。 然而,如果只需要单向的消息推送,HTTP 通过服务器发送的事件也有这种功能。 WebSocket 的通信过程如下: 首先,通过 HTTP 切换协议。服务器返回 101 状…

首届PolarDB开发者大会在京举办,阿里云李飞飞:云数据库加速迈向智能化

1月17日&#xff0c;阿里云PolarDB开发者大会在京举办&#xff0c;中国首款自研云原生数据库PolarDB发布“三层分离”新版本&#xff0c;基于智能决策实现查询性能10倍提升、节省50%成本。此外&#xff0c;阿里云全新推出数据库场景体验馆、训练营等系列新举措&#xff0c;广大…

test-02-test case generate 测试用例生成 EvoSuite 介绍

拓展阅读 junit5 系列 基于 junit5 实现 junitperf 源码分析 Auto generate mock data for java test.(便于 Java 测试自动生成对象信息) Junit performance rely on junit5 and jdk8.(java 性能测试框架。性能测试。压测。测试报告生成。) 拓展阅读 自动生成测试用例 什么…

网络部署实战具体学习内容总结

网络部署实战具体学习内容总结 &#x1f4bb;网络部署实战课程通常旨在教授学生如何规划、配置、维护和优化计算机网络。这些课程涵盖了广泛的主题&#xff0c;以确保学生具备网络部署和管理所需的技能。 网络部署实战课程具体学习内容&#x1f447; 1️⃣网络架构设计及网络原…

AMRT3D使用指南:基于快速搭建3D场景的高频问答

在3D领域有所涉猎的朋友&#xff0c;相信对于3D引擎都不会陌生。自从数字孪生、3D应用提上战略规划后&#xff0c;开发者都希望尽快完成高质量的3D可视化开发实战&#xff0c;企业都希望高效集成三维能力&#xff0c;结合业务快速落地&#xff0c;最直接的方式就是通过3D引擎来…

DP读书:《openEuler操作系统》(七)FSCK与VFS虚拟文件系统

10min速通FSCK、原子操作与VFS 文件系统检查器1.检查inode表1) 遍历所有inode2) 修复多次引用数据块 2.检查目录结构3.检查目录的连接1) 检查根目录确保存在2) 遍历所有目录的inode,有问题的连接到/lostfound 4.检查引用次数5.检查位图一致性 日志1.主要的数据结构1) 原子操作描…

数据结构之串

数据结构之串 1、串的定义及基本运算2、串的存储结构3、串的模式匹配 数据结构是程序设计的重要基础&#xff0c;它所讨论的内容和技术对从事软件项目的开发有重要作用。学习数据结构要达到的目标是学会从问题出发&#xff0c;分析和研究计算机加工的数据的特性&#xff0c;以便…

git-生成证书、公钥、私钥、error setting certificate verify locations解决方法

解决方法 方法1-配置证书、公钥、私钥打开Git Bash设置名称和邮箱执行&#xff0c;~/.ssh执行&#xff0c;ssh-keygen -t rsa -C "这是你的邮箱"&#xff0c;如图&#xff1a;进入文件夹可以看到用记事本之类的软件打开id_rsa.pub文件&#xff0c;并且复制全部内容。…

P9842 [ICPC2021 Nanjing R] Klee in Solitary Confinement 题解(SPJ!!!)

[ICPC2021 Nanjing R] Klee in Solitary Confinement 题面翻译 给定 n , k n,k n,k 和一个长为 n n n 的序列&#xff0c;你可以选择对区间 [ l , r ] [l, r] [l,r] 的数整体加上 k k k&#xff0c;也可以不加。最大化众数出现次数并输出。 题目描述 Since the travele…

制造领域 智能制造典型场景参考指引

智能制造场景是智能工厂的核心组成部分&#xff0c;是指面向制造过程各个环节&#xff0c;通过新一代信息技术、先进制造技术的深度融合&#xff0c;部署高档数控机床与工业机器人、增材制造装备、智能传感与控制装备、智能检测与装配装备、智能物流与仓储装备、行业成套装备等…

Windows 下 PYQT开发环境的搭建:

(1)环境搭建&#xff1a; PYQT 安装包&#xff1a; Anaconda&#xff1a; Anaconda3-2023.09-0-Windows-x86_64 pycharm&#xff1a; pycharm 2019.3 下载包&#xff1a; Anaconda:下载成功 |蟒蛇 (anaconda.com) pycharm: pycharm安装包_pycharm用copilotchat资源-CSD…

利用 ChatGPT 高效搜索:举一反三的思考方式,高效查找解决方案

文章目录 基础思路举一反三Go 语言 Web 框架延伸思考思考结论 本文只是我的一些尝试&#xff0c;基于 ChatGPT 实现系统化快速搜索某编程语言的特定领域相关包或者基于其他语言类推荐落地方案的尝试。 这篇文章中描述的方式不一定是好方式&#xff0c;但应该会有一定的启示作用…