STL之容器stack
目录
栈的底层实现原理
1. stack定义和初始化
2.stack的赋值
3. stack进栈和出栈
4. stack判空和大小
5. 注意事项(附加)
欢迎关注微信公众号 “三贝勒文子” ,每天学习C++
学过数据结构的小伙伴都知道栈(stack),它是一种存放数据的结构体,以往我们在学习编程的时候都会自己去实现一个栈,今天,小编告诉你C++的STL给我们提供了stack容器,这个容器就是栈。
栈的特性就是先进后出,而且只有一个开口,只能在一端进行数据的插入和删除操作。如下图所示:
栈的底层实现原理
在STL中,栈的底层实现原理默认是双端队列deque,但是你也可以通过vector或者list去实现stack。
如果你要使用stack容器,那么需要添加头文件
# include<stack>
1. stack定义和初始化
默认构造函数:
拷贝构造函数:
// stack<T> stkT;//stack采用模板类实现, stack对象的默认构造形式:
// stack(const stack &stk);//拷贝构造函数
stack<int> serven_stk1; // 空栈,默认构造函数
stack<int> serven_stk2(serven_stk1); // 拷贝构造函数
2.stack的赋值
operator=:重写operator=操作符。
// stack& operator=(const stack &stk);//重载等号操作符
/* stack的赋值操作 */
serven_stk1.push(1);
serven_stk1.push(2);
serven_stk2 = serven_stk1; // 将栈serven_stk1拷贝给栈serven_stk2
cout<<"栈serven_stk1的出栈顺序为:";
Print_Stack(serven_stk1);
cout<<"栈serven_stk2的出栈顺序为:";
Print_Stack(serven_stk2);
cout<<endl;
运行结果:
3. stack进栈和出栈
push(val):元素入栈
pop():元素出栈
top():获取栈顶元素
// push(elem);//向栈顶添加元素
// pop();//从栈顶移除第一个元素
// top();//返回栈顶元素
/* stack的进栈和出栈操作 */
serven_stk1.push(5); // 进栈
serven_stk1.push(4); // 进栈
serven_stk1.push(3); // 进栈
cout<<"出栈前serven_stk1的长度:"<<serven_stk1.size()<<endl;
serven_stk1.pop(); // 出栈
cout<<"出栈后serven_stk1的长度:"<<serven_stk1.size()<<endl;
cout<<"栈serven_stk1的栈顶元素为:"<<serven_stk1.top()<<endl;
cout<<"栈serven_stk1的长度:"<<serven_stk1.size()<<endl<<endl;
运行结果:
4. stack判空和大小
empty():
size():
// empty();//判断堆栈是否为空
// size();//返回堆栈的大小
/* stack判空 */
cout<<"栈serven_stk1是否为空栈:"<<serven_stk1.empty()<<endl;
cout<<"栈serven_stk1的长度:"<<serven_stk1.size()<<endl;
运行结果:
5. 注意事项(附加)
在上面的打印栈元素的函数Print_stack中,参数的传递有三种,值传递、引用传递和指针传递,在这里就想告诉你只有值传递打印栈,执行pop()后,实参的栈里面的元素都还在。引用传递和指针传递在函数里面执行pop()后实参的栈的元素就都不见了。
/* 参数传递*/
cout<<"栈serven_stk2的出栈顺序为:";
Print_Stack(serven_stk2);
cout<<"栈serven_stk2的长度:"<<serven_stk2.size()<<endl;
cout<<"栈serven_stk2的出栈顺序为:";
Print_StackRef(serven_stk2);
cout<<"栈serven_stk2的长度:"<<serven_stk2.size()<<endl;/* 值传递函数 */
void Print_Stack(stack<int> ser){while(!ser.empty()){cout<<ser.top()<<" ";ser.pop();}cout<<endl;
}/* 引用传递函数 */
void Print_StackRef(stack<int>& ser){while(!ser.empty()){cout<<ser.top()<<" ";ser.pop();}cout<<endl;
}
运行结果:
可以看到引用传递的结果就是,栈的大小变成0了,而值传递就还是2。 这个跟本章节的栈没多大关系,只是小编在这里告诉你一下,值传递和引用传递的区别和效果。
既然说到这里了,就再说一下吧。在我们调用函数的时候,编译器会给函数里面的形参申请内存空间,然后将实参的数据拷贝一份放置到形参的内存空间中。
值传递:
引用传递:
这两张图很明显了吧~~
欢迎关注微信公众号 “三贝勒文子” ,每天学习C++
STL之容器stack相关推荐
- c++ stl栈容器stack用法介绍
stack堆栈容器 堆栈是一个线性表,插入和删除只在表的一端进行.这一端称为栈顶(Stack Top),另一端则为栈底(Stack Bottom).堆栈的元素插入称为入栈,元素的删除称为出栈.由于元素 ...
- cqueue结构pop_c++ stl栈容器stack的pop(),push()等用法介绍及头文件
C++ Stack(堆栈) 是一个容器类的改编,为程序员提供了堆栈的全部功能,--也就是说实现了一个先进后出(FILO)的数据结构. c++ stl栈stack的头文件为: #include c++ ...
- 【C++】 STL库的stack容器
STL库的stack容器 1.构造函数 2.增 2.1 push() 2.2 emplace() 两者区别 3.删 pop() 4.改 4.1 swap()交换 5.查 top() 6.判空 empt ...
- 容器删除元素后迭代器失效_STL 4: STL之容器:选择时机,删除元素,迭代器失效...
一. 种类: 标准STL序列容器:vector.string.deque和list. 标准STL关联容器:set.multiset.map和multimap. 非标准序列容器slist和rope.sl ...
- [C++ STL] 各容器简单介绍
[C++ STL] 各容器简单介绍 目录 一.什么是STL? 二.容器(Containers) 2.1 vector 2.2 deque 2.3 list 2.4 set 2.5 map 2.6 容器 ...
- 极客班C++ STL(容器)第二周笔记
为什么80%的码农都做不了架构师?>>> 极客班 C++ STL (容器算法)第二周笔记 标签(空格分隔): C++ 1. 容器(下) 1.1 Stack a. 概述 Stac ...
- STL 常用容器的底层数据结构
STL 常用容器的底层数据结构实现 1.vector 底层数据结构为数组 ,支持快速随机访问 2.list 底层数据结构为双向链表,支持快速增删 3.deque 底层数据结构为一个中央控制器和多个缓冲 ...
- STL库:stack和queue
STL库:stack和queue 文章目录 STL库:stack和queue 1.STL库中stack的官方介绍 2.stack的常用接口 3.stack的模拟实现 4.STL库中queue的官方介绍 ...
- 【读书笔记】【Effective STL】容器
第 1 条:慎重选择容器类型. C++ 中不同的容器分类如下:[标准 or 非标准][STL or 非 STL][序列 or 关联] 标准 STL 序列容器:vector.string.deque.l ...
最新文章
- 初等数论--整除--判断一个数是否是素数
- Error:Unable to capture view hierarchy
- C#使用HttpClient进行http操作
- spring-data-jpa 使用
- 一切为了开放科学!Papers with Code新增CS、物理、数学、统计学等多个学科
- [独孤九剑]持续集成实践(三)- Jenkins安装与配置(Jenkins+MSBuild+GitHub)
- ActiveMQ 认证
- OC中的内省方法初探
- Linux系统下poll的使用方式
- C#之ActionBlock异步关闭死锁
- Kubernetes网络策略,这一篇就够了
- AS3文本框的操作,为密码框添加按钮
- 如何写前端技术方案文档?
- 1+x云计算平台运维与开发初级
- matplotlib-27 内嵌环形饼图
- self和parent的用法
- 03Java常用API-16. 日期Date类型及其常用方法
- oracle asm 缺省用户,oracle asm自动存储使用及管理说明(下)
- 苹果应用商店审核指南
- 离职了半年了,大家觉得我为啥离职呢?
热门文章
- pdcch加扰_一种基站/终端及其PDCCH加扰/解扰的方法和装置_2014104470078_权利要求书_专利查询_专利网_钻瓜专利网...
- Laravel使用swagger PHP生成api接口文档
- 【java】-XX:-OmitStackTraceInFastThrow只有空指针,没有堆栈信息
- 2022-01-27 使用liquibase管理mysql执行版本
- Android开机画面定制
- xpath 准确匹配 跟 模糊匹配属性
- Html和Markdown中的空格, nbsp; ensp; emsp; 以及 thinsp; zwnj; zwj;三种Unicode空格
- 基于GitHub搭建个人网站
- 设置鼠标右键文件夹打开idea
- MySQL数据恢复(通过.frm和.idb文件)