c++ Stack详解

一、c++ Stack类

Stack是一个后进先出(LIFO)的数据结构,c++ STL中的stack类也是基于此设计。c++ stack类可以存储同一数据类型的元素,其主要操作有入栈(push())和出栈(pop())。

#include <stack>
using namespace std;

int main() {
   stack<int> stack1; // 声明一个存储int类型的stack
   stack1.push(1); // 入栈
   stack1.push(2);
   stack1.push(3);
   cout << "栈顶元素: " << stack1.top() << endl; // 输出栈顶元素
   stack1.pop(); // 出栈
   cout << "栈大小: " << stack1.size() << endl;
   return 0;
}

运行结果:

栈顶元素: 3

栈大小: 2

二、c++ Stack实现

c++ stack类通常是通过deque(双端队列)来实现的,也可以使用vector、list等STL容器来实现。

template <class T, class Container = deque <T> >
class stack {
public:
   explicit stack(const Container& ctnr = Container()); // 构造函数
   bool empty() const; // 判断栈是否为空
   size_t size() const; // 返回栈的大小
   T& top(); // 返回栈顶元素的引用
   const T& top() const; // 返回栈顶元素的值
   void push(const T& val); // 入栈
   void pop(); // 出栈
   Container& get_container(); // 返回容器
};

三、c++ Stack函数

除了push()和pop()之外,c++ Stack类还提供了其他一些有用的函数,例如empty()、size()、top()等。

empty(): 判断栈是否为空

size(): 返回栈的大小

top(): 返回栈顶元素的引用

push(): 入栈

pop(): 出栈

四、c++ Stack计算器

我们可以使用c++ stack类实现一个简单的计算器。例如输入字符串”3 4 +”,计算3+4的值。

#include <iostream>
#include <stack>
#include <string>
using namespace std;

int main() {
   stack<int> stack1;
   string str = "3 4 +";
   int len = str.length();
   for (int i = 0; i < len; i++) {
      if (str[i] == ' ') {
         continue;
      }
      else if (isdigit(str[i])) { // 数字入栈
         int num = 0;
         while (i < len && isdigit(str[i])) {
            num = num * 10 + (str[i] - '0');
            i++;
         }
         i--;
         stack1.push(num);
      }
      else { // 运算符出栈
         int tmp1 = stack1.top();
         stack1.pop();
         int tmp2 = stack1.top();
         stack1.pop();
         switch (str[i]) {
            case '+': stack1.push(tmp2 + tmp1); break;
            case '-': stack1.push(tmp2 - tmp1); break;
            case '*': stack1.push(tmp2 * tmp1); break;
            case '/': stack1.push(tmp2 / tmp1); break;
         }
      }
   }
   cout << stack1.top() << endl;
   return 0;
}

运行结果:

7

五、c++ Stack用法

c++ Stack类在实际开发中用途很广泛,例如可以用来解决括号匹配问题、中缀表达式转后缀表达式、逆波兰表达式求值等问题。

六、c++ Stack弹出

c++ Stack类中的pop()函数会将栈顶元素弹出,但并不返回其值,如果需要获取其值,可以使用top()函数先获取其值再弹出。

七、c++ Stack头文件

c++ stack类的头文件是<stack>

八、c++ Stack出错

由于c++ Stack类是基于STL容器实现的,所以在使用时需要注意容器的大小、类型等问题。如果将不同类型的元素存储在同一个stack中,可能会引起类型错误。

九、c++ Stack不是容器

需要注意的是,c++ Stack类不是STL容器,它只是基于STL容器实现的一种数据结构。

十、c++ Stack知识点选取

选取的c++ Stack知识点包括类的定义、实现方式、常用函数、实际用途、出错等问题。

原创文章,作者:HUAG,如若转载,请注明出处:https://www.506064.com/n/137449.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
HUAGHUAG
上一篇 2024-10-04 00:17
下一篇 2024-10-04 00:17

相关推荐

  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • Linux修改文件名命令详解

    在Linux系统中,修改文件名是一个很常见的操作。Linux提供了多种方式来修改文件名,这篇文章将介绍Linux修改文件名的详细操作。 一、mv命令 mv命令是Linux下的常用命…

    编程 2025-04-25
  • nginx与apache应用开发详解

    一、概述 nginx和apache都是常见的web服务器。nginx是一个高性能的反向代理web服务器,将负载均衡和缓存集成在了一起,可以动静分离。apache是一个可扩展的web…

    编程 2025-04-25
  • git config user.name的详解

    一、为什么要使用git config user.name? git是一个非常流行的分布式版本控制系统,很多程序员都会用到它。在使用git commit提交代码时,需要记录commi…

    编程 2025-04-25
  • Java BigDecimal 精度详解

    一、基础概念 Java BigDecimal 是一个用于高精度计算的类。普通的 double 或 float 类型只能精确表示有限的数字,而对于需要高精度计算的场景,BigDeci…

    编程 2025-04-25
  • Python输入输出详解

    一、文件读写 Python中文件的读写操作是必不可少的基本技能之一。读写文件分别使用open()函数中的’r’和’w’参数,读取文件…

    编程 2025-04-25
  • 详解eclipse设置

    一、安装与基础设置 1、下载eclipse并进行安装。 2、打开eclipse,选择对应的工作空间路径。 File -> Switch Workspace -> [选择…

    编程 2025-04-25
  • MPU6050工作原理详解

    一、什么是MPU6050 MPU6050是一种六轴惯性传感器,能够同时测量加速度和角速度。它由三个传感器组成:一个三轴加速度计和一个三轴陀螺仪。这个组合提供了非常精细的姿态解算,其…

    编程 2025-04-25
  • Python安装OS库详解

    一、OS简介 OS库是Python标准库的一部分,它提供了跨平台的操作系统功能,使得Python可以进行文件操作、进程管理、环境变量读取等系统级操作。 OS库中包含了大量的文件和目…

    编程 2025-04-25

发表回复

登录后才能评论