C++中Stack(栈)的使用方法与基本操作详解
目录
- 一、stack概述
- 二、stack的基本操作
- 1、头文件
- 2、stack创建方式
- 3、栈顶和栈底操作
- 4、元素添加和删除
- 5、栈的大小操作
- 6、判断栈是否为空
- 三、stack的实际应用
一、stack概述
Stack(栈)是一种线性数据结构,它具有"先进后出“(Last In First Out,简称LIFO)的特点,即新元素进栈后只能位于栈顶,元素出栈时也只能从栈顶开始。
在C++中,stack通常是通过STL(Standard Template Library)库中的stack模板实现的。STL stack是基于deque(双端队列)实现的,通过deque模板我们可以实现stack的一些操作。
二、stack的基本操作
1、头文件
在使用STL中stack模板之前,我们需要包括头文件#include<stack>
。
#include <iostream> #include <stack> using namespace std;
2、stack创建方式
在C++中,我们使用类模板stack 来实现stack。其中T是存储元素的类型。stack通过调用默认构造函数生成一个空stack
stack<int>a; // 创建一个空stack
3、栈顶和栈底操作
在stack中,我们可以分别通过stack::top()和stack::back()来访问栈顶和栈底元素
stack<int>a; a.push(1); a.push(2); cout << a.top() << endl; // 输出2 cout << a.back() << endl; // 输出1
4、元素添加和删除
在stack中,我们通过push()函数向栈顶添加一个元素。同时,我们也可以使用pop()函数来从栈顶删除一个元素
stack<int>a; a.push(1); // 数组变成[1] a.push(2); // 数组变成[1,2] cout << a.top() << endl; // 输出2 a.pop(); // 弹出2 cout << a.top() << endl; // 输出1
5、栈的大小操作
我们可以通过stack::size()函数获取当前栈中的元素数量
stack<int>a; a.push(1); // 数组变成[1] a.push(2); // 数组变成[1,2] a.push(3); // 数组变成[1,2,3] cout << a.size() << endl; // 输出3
6、判断栈是否为空
通过stack::empty()函数可以判断当前的栈是否为空。如果栈为空则返回值为true,否则为false
stack<int>a; cout << a.empty() << endl; // 输出1,表示为空 a.push(1); // 数组变成[1] a.push(2); // 数组变成[1,2] cout << a.empty() << endl; // 输出0,表示不为空
三、stack的实际应用
stack在数学中经常被用来解决数学表达式中的括号匹配问题。在这个问题中,我们需要使用stack来匹配左右括号,以确保所输入的算式结果是正确的
假设我们有一个算式"( a + b ) / ( c - d )",那么我们可以像下面的代码一样用stack来检查该算式中是否存在括号匹配问题
#include <iostream> #include <stack> using namespace std; int main(){ stack<char>s; string str = "( a + b ) / ( c - d )"; for(int i=0;i<str.length();i++){ if(str[i]=='(') s.push(str[i]); else if(str[i]==')') s.pop(); } if(s.empty()){ cout<<"括号匹配成功"<<endl; } else{ cout<<"括号匹配失败"<<endl; } return 0; }
以上就是C++中Stack(栈)的使用方法与基本操作详解的详细内容,更多关于C++ Stack的资料请关注我们其它相关文章!
相关推荐
-
C++ STL容器stack和queue详解
stack是一个比较简单的容器,它的使用也很简单,stack是LIFO容器,就是后进先出,最后添加进去的元素,第一个取出来 stack初始化 std::stack<int> first; std::stack<int> second(first); std::stack<int, std;:vector<int>> third; //使用vector初始化stack ### stack常用方法### empty();//判断是否为空 push(Elem e)
-
C++栈(stack)的模板类实现代码
本文实例为大家分享了C++栈(stack)的模板类实现代码,供大家参考,具体内容如下 1.基本概念 栈中的元素遵守"先进后出"的原则(LIFO,Last In First Out) 只能在栈顶进行插入和删除操作 压栈(或推入.进栈)即push,将数据放入栈顶并将栈顶指针加一 出栈(或弹出)即pop,将数据从栈顶删除并将栈顶指针减一 栈的基本操作有:pop,push,判断空,获取栈顶元素,求栈大小 2.构造栈 可以使用数组构造栈,也可以使用单向链表构造,我觉得使用单向链表更加灵活方便,下
-
C++详解实现Stack方法
目录 栈简介 stack模拟 示例代码 开发环境 运行结果 栈简介 栈本着先进后出的原则,来存取数据.作为数据结构中的一种,这里不多介绍相关栈.仅以此文记录C++中栈的实现,可帮助提升编程能力与对栈的理解. stack模拟 stack是一种容器适配器,专门在具有后进先出的上下文环境中,其删除只能是在一端进行操作. stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出 .
-
C++Stack栈类模版实例详解
目录 1.栈的介绍 2.栈实现 3.代码测试 总结 1.栈的介绍 栈的实现方式分为3种 基于静态数组实现,内部预设一个很大的数组对象, 实现简单,缺点是空间受限. 基于动态数组实现,内部预设一个容量值,然后分配一段内存空间数组,如果入栈大于默认容量值时,则再次扩大分配新的内存数组,并将旧数组拷贝至新数组及释放旧数组. 基于双向循环链表实现 栈的函数需要实现如下所示: T pop() : 出栈并返回栈顶元素 void push(const T &t) : 入栈 const T & top(
-
C++线程安全容器stack和queue的使用详细介绍
目录 线程安全的容器栈threadsafe_stack 线程安全的容器队列threadsafe_queue 要构建线程安全的数据结构, 关注几点: 若某线程破坏了数据结构的不变量, 保证其他线程不能看到 提供的操作应该完整,独立, 而非零散的分解步骤避免函数接口固有的条件竞争(比如之前提到的empty和top和pop) 线程安全的容器栈threadsafe_stack 入门(3)里曾介绍过线程安全的stack容器, 这里把代码搬过来再分析 逐项分析, 该代码如何实现线程安全的 template<
-
C++中stack、queue、vector的用法详解
一.栈(stack) 引入头文件 #include<stack> 常用的方法 empty() 堆栈为空则返回真 pop() 移除栈顶元素 push() 在栈顶增加元素 size() 返回栈中元素数目 top() 返回栈顶元素 3.实例代码 #include<iostream> #include<stack> using namespace std; int main(){ //创建栈 s stack<int> s; //将元素压入栈 for(int i=0;
-
JavaScript中自带的 reduce()方法使用示例详解
1.方法说明 , Array的reduce()把一个函数作用在这个Array的[x1, x2, x3...]上,这个函数必须接收两个参数,reduce()把结果继续和序列的下一个元素做累积计算,其效果就是: [x1, x2, x3, x4].reduce(f) = f(f(f(x1, x2), x3), x4) 2. 使用示例 'use strict'; function string2int(s){ if(!s){ alert('the params empty'); return; } if
-
C# 从 UTF-8 流中读取字符串的正确方法及代码详解
我们下面的代码是从一个流 stream 中读取 UTF-8 编码的字符串.我们可以先考虑一下其中存在的潜在问题. string ReadString(Stream stream) { var sb = new StringBuilder(); var buffer = new byte[4096]; int readCount; while ((readCount = stream.Read(buffer)) > 0) { var s = Encoding.UTF8.GetString(buf
-
ASP.NET Core中Startup类、Configure()方法及中间件详解
ASP.NET Core 程序启动过程如下 1, Startup 类 ASP.NET Core 应用使用Startup类,按照约定命名为Startup.Startup类: 可选择性地包括ConfigureServices方法以配置应用的服务. 必须包括Configure方法以创建应用的请求处理管道. 当应用启动时,运行时调用ConfigureServices和Configure . Startup 方法体如下 public class Startup { // 使用此方法向容器添加服务 publ
-
idea中加入git版本控制的方法及步骤详解
idea中加入git版本控制: 在idea中加入git版本控制,方便团队中多人协同开发,项目可以同时方便进行管理和迭代.下面就是idea中加入git 的方法和步骤啦 将本地项目上传到远程仓库的 一:第一步,找到git安装地址,加入到idea中 二:第二步 三:第三步 四:第四步 五:第五步 idea解决远程项目与本地项目的冲突问题 再在本地idea中将本地项目push到远程仓库,此时这里idea会自动将远程仓库中修改的项目拉去下来,然后做一个合并,这里给出提示 出现了文件冲突: 这里将不同的修改
-
c语言stack(栈)和heap(堆)的使用详解
一.预备知识-程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1.栈区(stack)-由编译器自动分配释放,存放函数的参数值,局部变量的值等.其操作方式类似于数据结构中的栈.2.堆区(heap)-一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收.注意它与数据结构中的堆是两回事,分配方式倒是类似于链表.3.全局区(静态区)(static)-全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另
-
ubuntu中python调用C/C++方法之动态链接库详解
安装boost python调用C/C++的方法有很多,本文使用boost.python.考虑到后期有好多在boost上的开发工作,所以boost一并安装了,Boost库分为两个部分来使用,一是直接使用对应的头文件,二是需要编译安装相应的库才可以使用. 具体安装方法可以参考:https://www.jb51.net/article/150380.htm 这里使用: sudo apt-get install libboost-all-dev 服务端 序列化后发送 main.cpp: #includ
-
java中stack(栈)的使用代码实例
java中stack类继承于vector,其特性为后进先出(lastinfirstout). 入栈和出栈实例图: 实例图的java代码实例: package com.lanhuigu.java.ListTest; import java.util.Stack; public class StackTest { public static void main(String[] args) { Stack<String> staffs = new Stack<String>(); //
-
c++中stack、queue和vector的基本操作示例
前言 这几天在接触搜索的题目,用bfs时基本都用到队列,就顺便学习了数据结构的栈.队列.本文将详细给大家介绍关于c++中stack.queue和vector的基本操作,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. stack 的基本操作有: 入栈,如例:s.push(x); 出栈,如例:s.pop();注意,出栈操作只是删除栈顶元素,并不返回该元素. 访问栈顶,如例:s.top() 判断栈空,如例:s.empty() ,当栈空时,返回true. 访问栈中的元素个数,如例:s.
-
java 正则,object中两个方法的使用(详解)
正则: "."和"\" "."点儿,在正则表达式中表示任意一个字符. "\"在正则表达式中是转意字符,当我们需要描述一个已经被正则表达式使用的特殊字符时,我们就可以通过使用"\"将其转变为原本的意思. "\"在正则表达式中也有一些预定义的特殊内容: \d:表示任意一个数字 \w:表示任意一个单词字符(只能是 数字,字母,下划线) \s:表示任意一个空白字符(\t \r \n \f \x0
随机推荐
- Java实现产生随机字符串主键的UUID工具类
- C#实现的XML操作类实例
- mysql之TIMESTAMP(时间戳)用法详解
- 浅谈angular4 ng-content 中隐藏的内容
- java多线程编程之使用Synchronized块同步方法
- php 数据结构之链表队列
- PHP基于迭代实现文件夹复制、删除、查看大小等操作的方法
- 研究Python的ORM框架中的SQLAlchemy库的映射关系
- 一段asp防注入的通用脚本
- Android实现长按back键退出应用程序的方法
- python中的hashlib和base64加密模块使用实例
- 如何恢复数据库备份到一个已存在的正在使用的数据库上
- 深入浅析SQL Server 触发器
- 搜索sql语句
- js抽奖实现随机抽奖代码效果
- Linux 服务器安全技巧
- Android Animation实战之一个APP的ListView的动画效果
- 基于Java实现抽奖系统
- unity实现场景切换进度条显示
- 详解Linux文本编辑器Vim
其他
- python中怎么安装 word2vec库
- el-table 保留两位小数
- java如何解析sql的xml拼接sql
- python asyncio 写文件
- python换位加密
- javassist 修改class中的 static变量
- easycome模式下怎么使用uview组件
- java 判断float相等
- 解决Jupyter无法导入已安装的 module问题
- swift上下移动动画效果
- 解决idea卡死问题
- goland 代码格式化
- python ax.contour 参数
- vue 接口没有结果时 页面遮罩
- vue开发环境取消生产警告
- batchInsert 插入空集合
- echarts 图表变形
- java 获取日期的最后一个天
- springBoot 怎么实现动态刷新配置文件
- 不下载anaconda如何下载GPU