C++ STL stack 用法
时间:2022-07-24
本文章向大家介绍C++ STL stack 用法,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
交流、咨询,有疑问欢迎添加QQ 2125364717,一起交流、一起发现问题、一起进步啊,哈哈哈哈哈
Stack(栈)是一种后进先出的数据结构,也就是LIFO(last in first out) ,最后加入栈的元素将最先被取出来,在栈的同一端进行数据的插入与取出,这一段叫做“栈顶”。
使用STL的stack需要include一个头文件<stack>
构造
template <class T, class Container = deque<T> > class stack;
如上,这对尖括号中有两个参数,第一个是T,表示栈中存放的数据的类型,比如int,double,或者结构体之类。
第二个参数指明底层实现的容器类型,也就是指明这个栈的内部实现方式,比如vector,deque,list。如果不指明它,默认使用deque(双端队列)。当然一般情况下不需要指定这一项参数。
直接看栗子、
// 构造 stacks
#include <iostream>
#include <stack> // 使用栈stack
#include <vector> // vector
#include <deque> // deque
using namespace std;
int main ()
{
stack<int> first; //构造一个用于存放int类型的空栈(默认底层容器为deque),size=0。这是最简单也是最常用的方式 ٩(๑❛ᴗ❛๑)۶如果感觉别的方式太复杂,会用这一种就行
deque<int> mydeque (3,100); //构造一个包含3个int元素的双端队列
stack<int> second (mydeque); //用自己的双端队列构造一个栈(size=3)
stack<int,vector<int> > third; //指明用vector实现一个栈(存放int),空栈size=0
vector<int> myvector (2,200); //构造一个存放2个元素的vector
stack<int,vector<int> > fourth (myvector); //用自己的vector构造一个栈,size=2
//输出四个栈的大小
cout << "size of first: " << first.size() << endl;
cout << "size of second: " << second.size() << endl;
cout << "size of third: " << third.size() << endl;
cout << "size of fourth: " << fourth.size() << endl;
return 0;
}
输出结果:
size of first: 0
size of second: 3
size of third: 0
size of fourth: 2
成员函数
先说一些常用的,直接看栗子୧(๑•̀⌄•́๑)૭
#include <iostream>
#include <stack>
using namespace std;
int main ()
{
stack<int> mystack;
for (int i=0; i<5; ++i) mystack.push(i); //push函数将参数元素加入栈中,没有返回值(例如这里循环将0,1,2,3,4加入栈中,注意栈顶元素是4)
cout << "size: " << mystack.size() << endl; //size函数返回栈的大小(此时有5个元素,size=5)
while (!mystack.empty()) //empty函数返回一个bool值,栈为空时返回true,否则返回false
{
cout << ' ' << mystack.top(); //top函数的返回值是栈顶元素(注意并没有删掉栈顶元素)
mystack.pop(); //pop函数将栈顶元素删掉,没有返回值
}
cout << endl;
return 0;
}
运行结果:
size: 5
4 3 2 1 0
再来看另一组栗子:
#include <iostream>
#include <stack>
using namespace std;
struct Node {
int a,b;
Node (int x, int y) {
a = x; b = y;
}
};
int main ()
{
stack<Node> mystack;
mystack.emplace(1,2); //emplace函数可以将一个元素加入栈中,与push的区别在于:emplace可以直接传入Node的构造函数的参数,并将构造的元素加入栈中
//mystack.push(1,2); //编译不通过,要达到上面的效果需要手动构造,例如mystack.push(Node(1,2));
Node p = mystack.top();
cout << p.a << " " << p.b << endl;
stack<Node> my2;
my2.swap(mystack); //swap函数可以交换两个栈的元素
cout << mystack.size() << " " << my2.size() << endl;
return 0;
}
运行结果:
1 2
0 1
各位看官老爷,如果觉得对您有用麻烦赏个子,创作不易,0.1元就行了。下面是微信乞讨码:
添加描述
添加描述
- 数字在排序数组中出现的次数
- 基于Dubbo的http自动测试工具分享
- 传统媒体要用大数据连接用户
- bootstrap源码分析之form、navbar
- Spark监控官方文档学习笔记
- Bootstrap源码分析之nav、collapse
- Maven打包排除某个资源或者目录
- c/c++ 宏中"#"和"##"的用法
- 源码中的哲学——通过构建者模式创建SparkSession
- 长连接和短连接分析
- 基于编辑距离来判断词语相似度方法(scala版)
- 运算符优先级
- 腾讯云联手腾讯安全玄武实验室,提供「应用克隆」漏洞免费检测服务
- 1.注册或登录页面设计:UILabel,UIButton,UITextField
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 浅谈React Native打包apk的坑
- Android 设置主题实现点击波纹效果的示例
- 更新Android Studio 3.0碰到的问题小结
- android实现一个图片验证码倒计时功能
- Android添加glide库报错Error:Failed to resolve:com.android.support:26.0.2的解决
- Android多线程下载示例详解
- 详解Android Gradle插件3.0挖坑日记
- Android开发之拼音转换工具类PinyinUtils示例
- Android多线程断点续传下载示例详解
- Android设备与外接U盘实现数据读取操作的示例
- [Alibaba-ARouter]浅谈简单好用的Android页面路由框架
- android屏幕圆角实现方法的示例代码
- Android开发中日期工具类DateUtil完整实例
- Android模仿实现微博详情页滑动固定顶部栏的效果实例
- Android EventBus(普通事件/粘性事件)详解