stack的常见用法详解
stack翻译为栈,是STL中实现的一个后进先出的容器。要使用 stack,应先添加头文件include<stack>,并在头文件下面加上“ using namespacestd;"
1. stack的定义
其定义的写法和其他STL容器相同, typename可以任意基本数据类型或容器:
stack<typename> name;
2. stack容器内元素的访问
由于栈(stack)本身就是一种后进先出的数据结构,在STL的 stack中只能通过top()来访问栈顶元素。
程序代码:
#include<cstdio>
#include<stack>
using namespace std;
int main(){stack<int> st;for(int i=1;i<=5;i++){st.push(i); //push(i)将i压入栈 }printf("%d\n",st.top()); //top()取栈顶元素 return 0;
}
运行结果:
3.stack常用函数实例解析
(1)push()
push(x)将x入栈,时间复杂度为O(1),实例见“ stack容器内元素的访问”。
(2)top()
top()获得栈顶元素,时间复杂度为O(1),实例见“ stack容器内元素的访问”。
(3)pop()
pop()用以弹出栈顶元素,时间复杂度为O(1)。
程序代码:
#include<cstdio>
#include<stack>
using namespace std;
int main(){stack<int> st;for(int i=1;i<=5;i++){st.push(i); //push(i)将i压入栈 ,1 2 3 4 5 依次入栈 }for(int i=1;i<=3;i++){st.pop(); //pop()将栈顶元素出栈,即将5 4 3 依次出栈 }printf("%d\n",st.top()); //top()取栈顶元素 return 0;
}
运行结果:
(4)empty()
empty()可以检测stack是否为空,返回true为空,返回false为非空,时间复杂度为O(1)。
程序代码:
#include<cstdio>
#include<stack>
using namespace std;
int main(){stack<int> st;printf("%d\n",st.empty()); //true=1;false=0for(int i=1;i<=5;i++){st.push(i); //push(i)将i压入栈 ,1 2 3 4 5 依次入栈 }printf("%d\n",st.empty()); //true=1;false=0return 0;
}
运行结果:
(5)size()
size()返回stack内元素的个数,时间复杂度为O(1)。
程序代码:
#include<cstdio>
#include<stack>
using namespace std;
int main(){stack<int> st;for(int i=1;i<=5;i++){st.push(i); //push(i)将i压入栈 ,1 2 3 4 5 依次入栈 }printf("%d\n",st.size()); return 0;
}
运行结果:
注意:
在使用pop()和top()函数之前必须先使用empty()函数判断栈是否为空。
4. stack的常见用途
stack用来模拟实现一些递归,防止程序对栈内存的限制而导致程序运行出错。一般来说,程序的栈内存空间很小,对有些题目来说,如果用普通的函数来进行递归,一旦递归层数过深(不同机器不同,约几千至几万层),则会导致程序运行崩溃。如果用栈来模拟递归算法的实现,则可以避免这一方面的问题(不过这种应用出现较少)。
stack的常见用法详解相关推荐
- torch.stack(), torch.cat()用法详解
torch.stack(), torch.cat()用法详解 if __name__ == '__main__':import torchx_dat = torch.tensor([[1, 2], [ ...
- 《算法笔记》学习日记——6.1 vector的常见用法详解
目录 6.1 vector的常见用法详解 问题 A: Course List for Student (25) 问题 B: Student List for Course (25) 小结 6.1 ve ...
- Linux中head和tail命令作用,Linux 命令head和tail常见用法详解
head和tail是一组想对应的命令,默认分别显示文件的开头和末尾10行记录. head head 命令可以将一段文本的开头一部分输出到标准输出. head命令既可以处理文本文件也可以处理标准输入. ...
- linux lvm2,LVM2常见用法详解
LVM2常见用法详解 1.简介 LVM(Logical Volume Manager)是逻辑卷管理的意思,是linux环境下对磁盘分区进行管理的一种机制,lvm是建立在硬盘和分区之上的一个逻辑层,来提 ...
- C++/C--unordered_map常见用法详解
文章目录 1. std::unordered_map 的定义与特性 2. 构造 std::unordered_map 3. 赋值操作 4. 迭代器操作 4.1 指向整个容器中的元素 4.2 指向某个桶 ...
- C++/C--set常见用法详解【转载】
1 概念 set是一个内部自动有序且不含重复元素的容器,其实现自动去重按升序排序.使用set,需要添加头文件:#include <set>.可以通过迭代器*it来访问set里面的元素,但是 ...
- C++中的unordered_map常见用法详解
文章目录 1. std::unordered_map 的定义与特性 2. 构造 std::unordered_map 3. 赋值操作 4. 迭代器操作 4.1 指向整个容器中的元素 4.2 指向某个桶 ...
- python propresql mysql_python数据库操作mysql:pymysql、sqlalchemy常见用法详解
本文实例讲述了python数据库操作mysql:pymysql.sqlalchemy常见用法.分享给大家供大家参考,具体如下: 相关内容: 使用pymysql直接操作mysql 创建表 查看表 修改表 ...
- dig命令的常见用法详解
CATALOG 什么是dig 一个查询的例子 常见用法 什么是dig dig(域信息搜索器)命令是一个用于询问 DNS 域名服务器的灵活的工具.它执行 DNS 搜索,显示从受请求的域名服务器返回的答复 ...
- pair的常见用法详解
目录 前言 pair的定义 pair中元素的访问 pair常用函数实例解析 pair的常见用途 前言 pair是一个很实用的"小玩意",当想要将两个元素绑在一起作为一个合成元素,又 ...
最新文章
- python向文档中输入内容_python处理文档:把选择题的答案选项对应的内容填到选择题题目的括号里面输入的文本...
- django-request对象
- 好莱坞电影公司系列电影
- mysql xa 和普通事务_一文看懂MySQL中基于XA实现的分布式事务
- java断言——Assertion
- 假装windows系统升级界面html源码
- 爬虫python名词解释_python爬虫
- 2021年JavaScript的发展前景如何呢?
- mysql my.ini设置root密码_mysql 5.7设置root密码 windows
- FTP、WEB虚拟目录作用
- LINUX下载编译libx264
- 设计模式 -- 解释器模式(Interpreter Pattern)
- 【雷达通信】基于matlab Omiga-K算法SAR回波生成和成像【含Matlab源码 1184期】
- 红米note 4x Android 8,红米note 4X升级安卓7.0:小米MIUI8第331周公测
- iAd框架详细解析 —— ASM
- 程序员也要学英语——名词和代词
- pdf文件如何转换成word?
- 小内存海量数据,找中位数: 只有2G内存,在10G数据量怎样找到中位数?
- 从别人那copy点学习资料
- [程序人生]--人生架构三个层次:智慧是大脑,选择是躯干,知识文化是血肉