写在前面:大家好!我是【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/
相关文章推荐