【C++养成计划】栈 —— 快速上手 STL stack 类(Day12)

写在前面:大家好!我是【AI 菌】,一枚爱弹吉他的程序员。我热爱AI、热爱分享、热爱开源! 这博客是我对学习的一点总结与思考。如果您也对 深度学习、机器视觉、算法、C++、Python 感兴趣,可以关注我的动态,我们一起学习,一起进步~
我的博客地址为:【AI 菌】的博客

上一篇:【C++养成计划】数据结构——链表list(Day11)
昨天,我们学习了常用的数据结构之一链表,今天我们来学习另一个很重要的数据结构——,目标是掌握C++中 stack类 的基本用法。在学习今天的内容之前,我希望你对基本的数据结构有所了解。如果你还是萌新,那么我墙烈推荐你结合这篇文章一起看:【算法与数据结构 05】“霸道“ 的栈——先进后出


1. 栈的介绍

栈是LIFO(后进先出)的系统 ,只能从栈顶插入或者删除元素。打个比方,如下图所示,可以将栈视为一叠盘子,最后叠上去的盘子最先被取下来,而不能直接去取中间或者底下的盘子。

在这里插入图片描述
在C++中,提供了已经封装好的stack类,用于对栈的操作。在使用它之前,我们只需要在程序开头加上:

#include <stack>

初学者选择性掌握:

栈也被称为一种自适应容器。所谓自适应容器就是:内部使用一种容器但呈现另一种容器的行为特征的容器。
比如,stack类在内部默认使用deque类实现。底层采用deque来存放数据,通过限制元素插入和删除的方式来实现其功能。
另外,我们也可指定使用vector或者list来实现stack。
注:如果没有指定底层用什么容器来实现stack类,stack会默认使用deque类来存储数据。

2. 实例化stack

创建一个存放整型数据的栈:

stack <int> nums;

创建一个存放类对象(比如Animal类)的栈:

stack <Animal> animals;

创建一个底层使用vector容器实现的栈,来存放双精度浮点数:

stack <double, vector <double> > nums_double;

下面我们来实际演示一下各种实例化方式:

#include <stack>
#include <vector>
using namesapce std;

class Animal
{
	程序块
};

int mian()
{
	//1.创建一个用来存放整型数的栈
	satck <int> nums;
	//2.创建一个用来存放Animal类对象的栈
	stack <Animal> animals;
	//3.创建一个底层使用vector容器实现的栈
	stack <double, vector <double> > nums_double;

	//4.使用一个stack对象的拷贝来创建另一个stack对象
	stack <int> numsCopy(nums);
	
	return 0;
)

3. stack的成员函数

stack的底层采用deque、list或者vector等来存放数据,通过限制元素插入和删除的方式来实现其功能。下面我们就来学习一下stack类的成员函数,其主要的成员函数如下表所示:

函数 功能
push() 在栈顶新增元素
pop() 删除栈顶的元素
empty() 检查栈是否为空栈,返回一个bool值
size() 返回栈中的元素数
top() 获得指向栈顶元素的引用
emplace() 与push相似,在栈顶新增元素;相比push,更节省内存空间

下面就来举一个简单的例子,分别来使用不同的成员函数,来看看效果:

#include <stack>
#include <iostream>
using namespace std;

int main()
{
	stack <int> nums;
	for(int i=0; i<10; i++)
		nums.push(i);  //在栈顶新增元素
		
	cout<<"nums是否为空:"<<nums.empty()<<endl<<endl;
	cout<<"当前栈内的元素个数为:"<<nums.size()<<endl<<endl;
	cout<<"栈顶的元素为:"<<nums.top()<<endl<<endl;

	cout<<"从栈顶逐一删除元素:";
	while(nums.size()!=0)
	{
		cout<<nums.top()<<" ";
		nums.pop();  //从栈顶删除元素 
	}
	return 0;
}

运行结果:
在这里插入图片描述
对于初学者来说,掌握上面的5个常用成员函数,就可以轻松的使用栈进行操作了!

除此之外,还有一个成员函数emplace,它与push相似,在栈顶新增元素;相比push,更节省内存空间。想了解emplace的具体用法,可参见官方指南:http://www.cplusplus.com/reference/stack/stack/emplace/


相关文章推荐

【算法与数据结构 04】多图讲解——线性表、顺序表、链表

【算法与数据结构 05】“霸道“ 的栈——先进后出

【C++养成计划】数据结构——链表list(Day11)

猜你喜欢

转载自blog.csdn.net/wjinjie/article/details/107807392