书接上期,这一期我们来聊聊容器适配器——stack
文章目录🐅
什么是stack?
stack概念
stack的API
什么是stack?
要想搞清楚什么是栈,首先我们先要明白什么是容器适配器,在第一期我有讲解,这里我再简单的重复一遍。
简单的理解容器适配器,其就是将不适用的序列式容器(包括 vector、deque 和 list)变得适用。即通过封装某个序列式容器,并重新组合该容器中包含的成员函数,使其满足某些特定场景的需要。
容器适配器本质上还是容器,只不过此容器模板类的实现,利用了大量其它基础容器模板类中已经写好的成员函数。当然,如果必要的话,容器适配器中也可以自创新的成员函数。
STL 提供了 3 种容器适配器,分别为 stack 栈适配器、queue 队列适配器以及 priority_queue 优先权队列适配器 ,容器适配器底层都采用deque实现,这期我们就来聊聊stack栈。
stack概念
stack 栈适配器是一种单端开口的容器,实际上该容器模拟的就是栈存储结构,即无论是向里存数据还是从中取数据,都只能从这一个开口实现操作。
stack 适配器的开头端通常称为栈顶。由于数据的存和取只能从栈顶处进行操作,因此对于存取数据,stack 适配器有这样的特性,即每次只能访问适配器中位于最顶端的元素,也只有移除 stack 顶部的元素之后,才能访问位于栈中的元素。是先进后出的数据结构。
注意:
- top永远指向栈顶元素
-
栈容器没有迭代器,因此不支持遍历行为(容器适配器都不支持迭代器)
stack的API
stack构造函数
stack<T> st;//stack采用模板类实现,stack对象的默认构造形式
stack(const stack& st);//拷贝构造函数
stack赋值操作
stack &operator=(const stack &st);//重载等号操作符
stack数据存取操作
push(elem);//向栈顶添加元素
pop();//从栈顶移除第一个元素
top();//返回栈顶元素
stack大小操作
empty();//判断堆栈是否为空
size();//返回堆栈的大小
int main()
{
stack<int> s;//容器适配器不支持初始化列表创建
//元素入栈
s.push(10);
s.push(20);
s.push(30);
s.push(40);
s.push(50);
if(!s.empty())
{
cout<<"栈的大小:"<<s.size()<<endl;
}
// 元素依次出栈
while(!s.empty())
{
// 打印栈顶元素,打印出:50 40 30 20 10
cout << s.top() << endl;
// 出栈
s.pop();
}
}
?感谢观看,订阅此专栏!
|