【C++】STL容器适配器——stack类的使用指南(含代码使用)(17)

news2024/11/24 11:04:08

前言

大家好吖,欢迎来到 YY 滴C++系列 ,热烈欢迎! 本章主要内容面向接触过C++的老铁
主要内容含:
在这里插入图片描述

欢迎订阅 YY滴C++专栏!更多干货持续更新!以下是传送门!

目录

  • 一、stack 类——基本介绍
  • 二、stack 类——使用环境准备
  • 三、stack类——文档查看
  • 四、stack 类——常用接口
    • 1).stack 基本使用场景
  • 五、stack类——例题应用(逆波兰表达式求值)

一、stack 类——基本介绍

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

二、stack 类——使用环境准备

  • 在使用string类时,必须包含#include<stack> #include<iostream>以及 展开命名空间using namespace std;

三、stack类——文档查看

  • 查看所有接口网站:https://cplusplus.com
    在这里插入图片描述

四、stack 类——常用接口

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

1).stack 基本使用场景

void test_stack_queue()
{
//创建一个栈以后,不断压入元素
	stack<int> st;
	st.push(1);
	st.push(2);
	st.push(3);
	st.push(4);

//取栈顶元素后,出栈顶元素
	while (!st.empty())
	{
		cout << st.top() << " ";
		st.pop();
	}
	cout << endl;


	deque<int> dq;
	dq.push_back(1);
	dq.push_back(2);
	dq.push_back(3);
	dq.push_back(4);
	dq.push_back(5);
	dq.push_back(6);

	for (size_t i = 0; i < dq.size(); i++)
	{
		cout << dq[i] << " ";
	}
	cout << endl;
}

五、stack类——例题应用(逆波兰表达式求值)

  • 题目所示:
    在这里插入图片描述
    在这里插入图片描述
  • 题解:
  • 用传统C语言做法:
  • 注意要点:
  1. 不可以直接对str里的数据进行switch case,因为switch case 要求其中的操作数是整型,所以必须确保栈里面的数据要么是经过atoi后的符号,要么是将整型划分为左右操作数以后出栈后剩下的符号;
class Solution {
public:
 int evalRPN(vector<string>& tokens)
  {
      stack<int> s;
      for (size_t i = 0; i < tokens.size(); ++i)
   {
      string& str = tokens[i];
      // str为数字
      if (!("+" == str || "-" == str || "*" == str || "/" == str))
      {
         s.push(atoi(str.c_str()));
      }
      else
      {
         // str为操作符
         int right = s.top();
         s.pop();
         int left = s.top();
         s.pop();
         switch (str[0])
        {
          case '+':
          s.push(left + right);
          break;
          case '-':
          s.push(left - right);
          break;
          case '*':
          s.push(left * right);
          break;
          case '/':
         // 题目说明了不存在除数为0的情况
         s.push(left / right);
         break;
        }
      }
   }
 return s.top();
 }
};

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

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

相关文章

if语句中的按位取反问题

&#x1f380; 文章作者&#xff1a;二土电子 &#x1f338; 关注公众号获取更多资源&#xff01; &#x1f438; 期待大家一起学习交流&#xff01; 文章目录 一、现象描述1.1 在C语言中&#xff08;非STM32&#xff09;1.2 STM32中运行 二、基础知识复习2.1 原码、反码和补…

dell r720部署chatglm3,使用nvidia tesla P40+M40

dell r720的idrac的地址默认是192.168.1.110&#xff0c;root 默认密码calvin fatal Error! All channnels have been disabled due to all DIMMs failed the Memoey 是什么意思 Dell PowerEdge T320服务器 开机显示 Fatal Errort!all channells have been disabled due to …

NSSCTF第11页(1)

[HUBUCTF 2022 新生赛]Calculate 进到主页 翻译 回答以下数学问题20次&#xff1b;你有3秒钟的时间来解决每个问题&#xff1b; 为了保护服务器&#xff0c;你不能在1秒内回答一个问题 您已回答0个问题&#xff1b; 让我们3秒速算&#xff0c;没那个实力&#xff0c;提示说是写…

Kotlin基础数据类型和运算符

原文链接 Kotlin Types and Operators Kotlin是新一代的基于JVM的静态多范式编程语言&#xff0c;功能强大&#xff0c;语法简洁&#xff0c;前面已经做过Kotlin的基本的介绍&#xff0c;今天就来深入的学习一下它的数据类型和运算操作符。 数据类型 与大部分语言不同的是&am…

Vue多级路由的实现

对Vue路由的配置不了解的看这篇文章&#xff1a;Vue-router 路由的基本使用-CSDN博客 一、配置children属性 注意&#xff1a;子路径不能带 / { path : "/父路径", component : 父组件, children : [{ path : "子路径", component : 子组件 }] } 二、配…

读源码的七大步骤

前序 在如今信息这么发达的时代&#xff0c;如何让自己成长得最快&#xff0c;莫过于直接去“学习”别人已经写好的产品。但一提到读源码&#xff0c;很多人都会比较畏惧&#xff0c;认为读源码是高手才会做的事情。毕竟动不动几十万行代码的源码&#xff0c;谁看了不害怕呢&a…

软件开发必备神器!一文读懂10款热门看板工具推荐!

看板&#xff08;Kanban&#xff09;是一种流行的框架&#xff0c;用于实施敏捷和DevOps软件开发。它要求实时沟通每个人的能力&#xff0c;并全面透明地展示正在进行的工作。工作项目在看板上以可视化方式表示&#xff0c;使项目经理和所有团队成员可以随时查看每个工作的状态…

云尘靶场 --铁三域控

签到1-eval ls System Assert 铁三域控 域就像是我们一个机房&#xff0c;老师的电脑控制很多很多电脑&#xff0c;这个机房就像一个域&#xff0c;老师是管理员身份&#xff0c;可以控制所有学生的电脑 下文的141就像老师&#xff0c;192.168.60.100就像学生的电脑 123 用…

Linux学习笔记之四(文件IO、目录IO)

Linux 1、文件IO1.1、open and close1.2、read and write1.3、lseek1.4、综合练习 2、目录IO2.1、mkdir2.2、opendir, closedir, readdir2.3、综合练习 1、文件IO 1.1、open and close 使用以下代码查看以下open函数原型&#xff1a; man 2 open如图&#xff0c;open函数有两…

测试开发角色定位

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

python opencv 实现对二值化后的某一像素值做修改和mask叠加

实现对二值化后的某一像素值做修改 使用OpenCV的findNonZero函数找到所有非零&#xff08;也就是像素值为255&#xff09;的像素&#xff0c;然后遍历这些像素并修改他们的值。示例代码&#xff1a; import cv2 import numpy as np # 加载并二值化图像 img cv2.imread(…

实验七 组合器模式的应用

实验目的 1)掌握组合器模式&#xff08;composite&#xff09;的特点 2 分析具体问题&#xff0c;使用组合器模式进行设计。 实验内容和要求 在例3.3的设计中&#xff0c;添加一个空军大队( Wing)类&#xff0c;该类与Squadron、Group类是平行的&#xff0c;因此应该继承了AirU…

【聚沙成塔系列】通信笔记知识汇总一

什么是NCO 载波NCO通过控制频率w控制。每次要累加的数字M就是频率控制字。调节M进而控制载波频率。 什么是带宽 3db带宽 常说的3dB带宽&#xff0c;是指在信号功率谱对称的情况下&#xff0c;功率谱密度比信号频谱中心处的峰值下降3dB的两个频率之间的频率范围 工作带宽 工作…

十年老程序员分享13个最常用的Python深度学习库和介绍,赶紧收藏码住!

文章目录 前言CaffeTheanoTensorFlowLasagneKerasmxnetsklearn-theanonolearnDIGITSBlocksdeepypylearn2Deeplearning4j关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案…

什么是本地存储的有效期?

前言 本地存储是一种在Web开发中常用的客户端存储数据的方式&#xff0c;它可以让网页应用程序在用户的浏览器中存储和检索数据&#xff0c;而无需依赖服务器来保存信息。本地存储的有效期是指数据存储在用户的设备上可以被访问和保留的时间段。在本地存储中&#xff0c;有两种…

7 mysql索引

1、索引的本质 索引&#xff08;Index&#xff09;是帮助MySQL高效获取数据的数据结构。 2、InnoDB支持常见的索引 B树索引、 全文索引、 哈希索引&#xff0c; 其中比较关键的是B树索引 3、HashMap不适合做数据库索引&#xff1f; 1.hash表只能匹配是否相等&#xff0c;不…

高数笔记06:无穷级数

图源&#xff1a;文心一言 时间比较紧张&#xff0c;仅导图~~&#x1f95d;&#x1f95d; 第1版&#xff1a;查资料、画导图~&#x1f9e9;&#x1f9e9; 参考资料&#xff1a;《高等数学 基础篇》武忠祥 &#x1f433;目录 &#x1f433;常数项级数 &#x1f40b;概要 &…

ABAP Json和对象的转换

se24新建类ZCL_JSON保存 点击修改&#xff0c;进入下图界面&#xff0c;点击红框。 复制粘贴下面代码 CLASS zcl_json DEFINITIONPUBLICCREATE PUBLIC .PUBLIC SECTION. *"* public components of class ZCL_JSON *"* do not include other source files here!!!TYP…

效率至少提高2倍!最实用的Linux命令合集

&#x1f4e2;专注于分享软件测试干货内容&#xff0c;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01;&#x1f4e2;交流讨论&#xff1a;欢迎加入我们一起学习&#xff01;&#x1f4e2;资源分享&#xff1a;耗时200小时精选的「软件测试」资…

上门预约按摩家政小程序开发;

上门预约按摩家政小程序开发&#xff0c;都可以做 上门按摩&#xff0c;服务预约小程序开发 服务预约类小程序开发。 小程序开放订单预约、即时服务、在线评价用户管理、会员充值、平优惠券、、平台自营、抢单、事个人入驻、分销邀请、商户入驻 等等 按摩上门预约、回收上门预约…