书接上期,这一期我们来聊聊容器适配器——stack

要想搞清楚什么是栈,首先我们先要明白什么是容器适配器,在第一期我有讲解,这里我再简单的重复一遍。
简单的理解容器适配器,其就是将不适用的序列式容器(包括 vector、deque 和 list)变得适用。即通过封装某个序列式容器,并重新组合该容器中包含的成员函数,使其满足某些特定场景的需要。
容器适配器本质上还是容器,只不过此容器模板类的实现,利用了大量其它基础容器模板类中已经写好的成员函数。当然,如果必要的话,容器适配器中也可以自创新的成员函数。
STL 提供了 3 种容器适配器,分别为 stack 栈适配器、queue 队列适配器以及 priority_queue 优先权队列适配器 ,容器适配器底层都采用deque实现,这期我们就来聊聊stack栈。
stack 栈适配器是一种单端开口的容器,实际上该容器模拟的就是栈存储结构,即无论是向里存数据还是从中取数据,都只能从这一个开口实现操作。

stack 适配器的开头端通常称为栈顶。由于数据的存和取只能从栈顶处进行操作,因此对于存取数据,stack 适配器有这样的特性,即每次只能访问适配器中位于最顶端的元素,也只有移除 stack 顶部的元素之后,才能访问位于栈中的元素。是先进后出的数据结构。
注意:
栈容器没有迭代器,因此不支持遍历行为(容器适配器都不支持迭代器)
- stack构造函数
- stack
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<<"栈的大小:"<
size()< - }
- // 元素依次出栈
- while(!s.empty())
- {
- // 打印栈顶元素,打印出:50 40 30 20 10
- cout << s.top() << endl;
- // 出栈
- s.pop();
- }
-
- }
感谢观看,订阅此专栏!
