【C++】STL中stack的用法及模拟实现

news2025/1/10 15:57:21

目录

  • 一、stack的简介
  • 二、stack的使用
  • 三、stack的模拟实现

一、stack的简介

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

在这里插入图片描述

二、stack的使用

template <class T, class Container = deque > class stack;

函数说明接口说明
stack()构造空的栈
empty()检测stack是否为空
size()返回stack中元素的个数
top()返回栈顶元素的引用
push()将元素val压入stack中
pop()将stack中尾部的元素弹出

bool empty() const;
size_type size() const;
value_type& top();
const value_type& top() const;
void push (const value_type& val);
void pop();

代码实现:

void TestStack1()
{
	stack<int, vector<int>> st;
	//stack<int, list<int>> st;
	//stack<int> st;
	st.push(1);
	st.push(2);
	st.push(3);
	st.push(4);
	st.push(5);
	st.push(6);
	cout << "stack中的元素个数:" << st.size() << endl;
	while (!st.empty())
	{
		cout << st.top() << " ";
		st.pop();
	}
}

三、stack的模拟实现

namespace hxj
{
	template<class T,class Container=vector<T>>
	class stack
	{
	public:
		void push(const T& x)
		{
			_con.push_back(x);
		}
		void pop()
		{
			_con.pop_back;
		}
		T& top()
		{
			return _con.back();
		}
		const T& top()
		{
			return _con.back();
		}
		size_t size()
		{
			return _con.size();
		}
		bool empty()
		{
			return _con.empty();
		}
	private:
		Container _con;
	};
}

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

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

相关文章

市值蒸发21亿港元,王一博还能拉着乐华走多久?

5月22日&#xff0c;#乐华被冻结2390万财产#话题冲上热搜。 近日&#xff0c;头顶“王一博”光环的乐华娱乐集团&#xff08;下称“乐华娱乐”&#xff0c;02306.HK&#xff09;交出了上市后的首份财报。 4月25日&#xff0c;财报公布的首个交易日&#xff0c;其股价下跌2.06…

【iOS】【最新】2023苹果开发者账号注册流程(公司类型)

一 Apple Developer 申请开发者账号 Apple Developer 点击 Account 创建 Apple ID 最好新注册一个新的&#xff0c;专门用做开发。 需要注意的是 开发者的名字和 ID 想好在填写 &#xff0c;注册成功后&#xff0c;不能自己修改&#xff0c;需要修改的话只能联系苹果客服。…

CCF-CSP 201903-1 小中大

该题比较简单&#xff0c;因为所给数据都是排好序的了&#xff0c;对于最大值与最小值我们只需判断第一个元素与最后一个元素的关系即可&#xff0c;而中位数的判断则与n的大小有关&#xff0c;如果n为偶数&#xff08;下标从1开始&#xff09;&#xff0c;那么中间会存在两个数…

各个查询引擎是如何提高写入效率,查询效率

RocketMq 1. 顺序IO 如果消息生产者生产了消息&#xff0c;发送到broker之后&#xff0c;需要存储在磁盘中&#xff0c;如果直接存储到话&#xff0c;并发度会很小&#xff0c;因为操作磁盘会很慢&#xff0c;尤其是操作随机IO&#xff0c;因此看看能不能在写入磁盘的时候&am…

制造企业如何抓住2023经济复苏做好数字化转型

2022年&#xff0c;在地缘政治冲突、新冠疫情、供应链挑战、通胀压力等多重冲击下&#xff0c;中国经济迎难而进。2023年随着防疫政策的调整和优化&#xff0c;也将成为经济全面复苏和发展的重要一年&#xff0c;这对于制造企业来说是一个重要的机遇。 据国际数据公司IDC预测&a…

尚硅谷Docker实战教程-笔记01【理念简介、官网介绍、平台入门图解、平台架构图解】

尚硅谷大数据技术-教程-学习路线-笔记汇总表【课程资料下载】视频地址&#xff1a;尚硅谷Docker实战教程&#xff08;docker教程天花板&#xff09;_哔哩哔哩_bilibili 尚硅谷Docker实战教程-笔记01【理念简介、官网介绍、平台入门图解、平台架构图解】尚硅谷Docker实战教程-笔…

Java | 一分钟掌握定时任务 | 9 - PowerJob分布式定时任务

作者&#xff1a;Mars酱 声明&#xff1a;本文章由Mars酱整理编写&#xff0c;部分内容来源于网络&#xff0c;如有疑问请联系本人。 转载&#xff1a;欢迎转载&#xff0c;转载前先请联系我&#xff01; 前言 我们选择一套框架或者技术的时候&#xff0c;一定要知道它的特点和…

电源大师课-初阶

第一课 电源系统构成和基础原理 1-电源效率 总的Pout除以Pin 2-输出电压调整率 源调整率(输入电压变化时&#xff0c;输出稳定程度) 负载调整率(输出负载变化时&#xff0c;输出稳定度) 温度调整率(工作环境温度在极限情况下&#xff0c;输出的稳定度) 3-纹波测试(20MHz、最…

KD7742电气安规综合测试仪

一、产品简介 KD7742电气安规综合测试仪具有交/直流耐压、绝缘电阻等项目的测试分析功能&#xff0c;能显示电压、电流和电阻的波形图以及趋势图&#xff0c;以便更直观的监测分析绝缘性能和绝缘崩溃时的各项指标&#xff0c;适用于高要求的测试分析场合。 产品具有测试参数范围…

郑州信源招标采购系统 定制

概述&#xff1a; 招标采购系统是郑州信源运用“互联网”、大数据、人工智能、区块链、物联网等新兴技术&#xff0c;结合供应链管理理念&#xff0c;以招标采购为核心&#xff0c;提供交易、管理、数据、服务、监管为一体的高标准采购管理平台&#xff0c;招标采购系统根据客户…

基于html+css的图片展示93

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

Qt编程基础 | 第六章-窗体 | 6.1、主窗体QMainWindow类

一、主窗体QMainWindow类 1.1、简介 QMainWindow是为用户提供主窗口程序的类&#xff0c;包含一个菜单栏&#xff08;menu bar&#xff09;、多个工具栏&#xff08;tool bars&#xff09;、多个锚接部件&#xff08;dock widgets&#xff09;、一个状态栏&#xff08;status …

基于jmeter完成压测

&#x1f3e0;个人主页&#xff1a;shark-Gao &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是shark-Gao&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f389;目前状况&#xff1a;23届毕业生&#xff0c;目前在某公司实习&#x1f…

FLEXPART拉格朗日粒子扩散模式建模技术及研究大气污染物源-汇关系中的实践经验与技巧

拉格朗日粒子扩散模式FLEXPART通过计算点、线、面或体积源释放的大量粒子的轨迹&#xff0c;来描述示踪物在大气中长距离、中尺度的传输、扩散、干湿沉降和辐射衰减等过程。 该模式既可以通过时间的前向运算来模拟示踪物由源区向周围的扩散&#xff0c;也可以通过后向运算来确…

剑指offer -- 二维数组中的查找

二维数组中的查找_牛客题霸_牛客网 (nowcoder.com) 暴力查找法: 是一种简单直接的解决方法&#xff0c;可以用于在二维数组中查找目标值。该方法的思路是遍历数组的每个元素&#xff0c;逐个与目标值进行比较。 具体步骤如下&#xff1a; 从数组的第一行第一列开始&#xff0c;…

Scala学习(十)---Set和Map

文章目录 1.Set集合1.1 不可变Set1.2 可变Set 2.Map2.1 不可变Map2.2 可变map 3.元组 1.Set集合 1.1 不可变Set 创建一个不可变set val setSet(1,2,3,4,6,5,4,4)println(set)//判断此set是否为不可变HashSetval bool set.isInstanceOf[HashSet[Int]]println(bool)运行&#…

考研数据结构--图

文章目录 图图的基本概念图的定义种类 图的抽象数据类型图的基本术语1. 端点和邻接点2. 顶点的度、入度和出度3. 完全图4. 稠密图、稀疏图5. 子图6. 路径和路径长度7. 回路或环8. 连通、连通图和连通分量9. 强连通图和强连通分量在一个图中找强连通分量的方法 10. 权和网 图的存…

如何在华为OD机试中获得满分?Java实现【统计匹配的二元组个数】一文详解!

✅创作者&#xff1a;陈书予 &#x1f389;个人主页&#xff1a;陈书予的个人主页 &#x1f341;陈书予的个人社区&#xff0c;欢迎你的加入: 陈书予的社区 &#x1f31f;专栏地址: Java华为OD机试真题&#xff08;2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述…

基于openfaas托管脚本的实践

作者 | 张曦 一、openfaas产品背景 在云服务架构发展之初&#xff0c;这个方向上的思路是使开发者不需要关心搭建和管理后端应用程序。这里并没有提及无服务器这个概念&#xff0c;而是指后端基础设施由第三方来托管&#xff0c;需要的基础架构组建均以服务的形式提供&#x…

list的模拟实现

第一步&#xff1a;看源代码 类的框架&#xff1a; 成员函数&#xff1a; 基本可以确定list是一个带头双向循环链表&#xff0c;end()的迭代器指向头节点&#xff0c;begin()的迭代器指向头结点的下一个节 list的迭代器&#xff1a;&#xff08;稍显复杂&#xff09; 库中的迭代…