STL stack 常见用法详解
《算法笔记》学习笔记
stack 常见用法详解
stack翻译为栈,是STL中实现的一个后进先出的容器。‘
1.stack的定义
//要使用stack,应先添加头文件#include <stack>, 并在头文件下面加上"using namespace std"
//定义
stack< typename > name;
2. stack容器内元素的访问
//由于栈(stack)本书就是一种后进先出的数据结构,在STL的stack中只能通过top()来访问栈顶元素
#include <stdio.h>
#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.top()); //top取栈顶元素
return 0;
}
3. stack常用函数实例解析
(1) push()
//push(x)将x入栈,时间复杂度为O(1)
(2) top()
//top()获得栈顶元素,时间复杂度为O(1)
(3) pop()
//pop()用以弹出栈顶元素,时间复杂度为O(1)
#include <stdio.h>
#include <stack>
using namespace std;
int main() {
stack<int> st;
for(int i = 1; i <= 5; i++) {
st.push(i); //将 1 2 3 4 5 依次入栈
}
for(int i = 1; i <= 3; i++) {
st.pop(); //连续三次将栈顶元素出栈,即将5 4 3 依次出栈
}
printf("%d\n", st.top());
return 0;
}
(4) empty()
//empty()可以检测stack内是否为空,放回true为空,返回false为非空,时间复杂度为O(1)
#include <stdio.h>
#include <stack>
using namespace std;
int main() {
stack<int> st;
if(st.empty() == true) { //一开始栈内没有元素,因此栈空
printf("Empty\n");
} else {
printf("Not Empty\n");
}
st.push(1);
if(st.empty() == true) { //入栈"1"后,栈非空
printf("Empty");
} else {
printf("Not Empty\n");
}
return 0;
}
(5) size()
//size()返回stack内元素的个数,时间复杂度为O(1)
#include <stdio.h>
#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.size()); //栈内有5个元素
return 0;
}
3. stack的常见用途
- 模拟实现一些递归,防止程序堆栈内存的现在而导致程序运行出错
STL stack 常见用法详解的更多相关文章
- STL priority_queue 常见用法详解
<算法笔记>学习笔记 priority_queue 常见用法详解 //priority_queue又称优先队列,其底层时用堆来实现的. //在优先队列中,队首元素一定是当前队列中优先级最高 ...
- STL queue 常见用法详解
<算法笔记>学习笔记 queue 常见用法详解 queue翻译为队列,在STL中主要则是实现了一个先进先出的容器. 1. queue 的定义 //要使用queue,应先添加头文件#incl ...
- STL map 常见用法详解
<算法笔记>学习笔记 map 常见用法详解 map翻译为映射,也是常用的STL容器 map可以将任何基本类型(包括STL容器)映射到任何基本类型(包括STL容器) 1. map 的定义 / ...
- STL set 常见用法详解
<算法笔记>学习笔记 set 常见用法详解 set是一个内部自动有序且不含重复元素的容器 1. set 的定义 //单独定义一个set set<typename> name: ...
- STL vector常见用法详解
<算法笔记>中摘取 vector常见用法详解 1. vector的定义 vector<typename> name; //typename可以是任何基本类型,例如int, do ...
- STL pair 常见用法详解
<算法笔记>学习笔记 pair 常见用法详解 //pair是一个很实用的"小玩意",当想要将两个元素绑在一起作为一个合成元素, //又不想因此定义结构体时,使用pair ...
- STL string 常见用法详解
string 常见用法详解 1. string 的定义 //定义string的方式跟基本数据类型相同,只需要在string后跟上变量名即可 string str; //如果要初始化,可以直接给stri ...
- C++标准模板库(STL)——queue常见用法详解
queue的定义 queue<typename> name; queue容器内元素的访问 由于队列本身就是一种先进先出的限制性数据结构,因此在STL中只能通过front()来访问队首元素, ...
- C++标准模板库(STL)——set常见用法详解
set的定义 set<typename> name; typename可以是任何基本类型,如int.double.char.结构体等,也可以是STL标准容器,如vector.set.que ...
随机推荐
- 【SecureCRT】SecureCRT 护眼配色
终端有一个好的配色,不仅能保护自己的眼睛,也能给人一个好心情,本配色方案适合任意一种SSH客户端软件. 设置背景颜色 Options => Sessions options => ...
- Github提交PR(pull request)过程
PR 想一想, 也可以想执行6.7.8, 再执行4.5. 避免原仓库和fork仓库的冲突 fork到自己的仓库 git clone到本地 git remote add upstream [原项目地址] ...
- CF258B
CF258B 题意: 7个人在 $ [1,m] $ 区间内取数,求第一个人选的数的4和7的个数大于其他人的4和7个数总和的方案数. 解法: 要求输入的 $ m $ 可以很大,而且需要按位考虑每隔人的贡 ...
- 用HQL自己写了个update!!!
原来代码: public void updateSj(String jsly, Integer zu,String sj) { if (!StringUtils.isBlank(jsly)&& ...
- Mybatis传递多个参数进行SQL查询的用法
当只向xxxMapper.xml文件中传递一个参数时,可以简单的用“_parameter”来接收xxxMapper.java传递进来的参数,并代入查询. 但是,如果在xxxMapper.java文件中 ...
- 递推,求至少连续放置三个U的危险组合
UVA580-Critical Mass 题意 有两种方块,L和U,有至少三个连续的U称为危险组合,问有多少个危险组合 solution: 至少这个概念比较难求 ,所以转化为(1ll<<n ...
- linux编辑文本(vim)时跳转到最后一行和第一行及相关指令
vi操作 1.跳到文本的最后一行:按“G”,即“shift+g” 2.跳到最后一行的最后一个字符 : 先重复1的操作即按“G”,之后按“$”键,即“shift+4”. 3.跳到第一行的第一个字符:先按 ...
- 记录一次webpack3升级到webpack4过程
升级之前也参考了一些网上的教程.借鉴之,进行的自己的升级.一些版本为什么设为那个版本号也是参考别人的结果. 整体是按照先升级npm run dev:在升级npm run build的顺序. 首先升级w ...
- 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_2-7.接口配置文件自动映射到属性和实体类配置
笔记 7.接口配置文件自动映射到属性和实体类配置 简介:使用@value注解配置文件自动映射到属性和实体类 1.添加 @Component或者Configuration 注解: ...
- rsync+inotify实时数据同步
没有实际的用过,先mark一下,后面实践. https://www.osyunwei.com/archives/7447.html 一.为什么要用Rsync+sersync架构? 1.sersync是 ...