• 大话STL第七期——stack栈


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

    文章目录🐅

    什么是stack?

    stack概念

    stack的API


    什么是stack?

    要想搞清楚什么是栈,首先我们先要明白什么是容器适配器,在第一期我有讲解,这里我再简单的重复一遍。

    简单的理解容器适配器,其就是将不适用的序列式容器(包括 vector、deque 和 list)变得适用。即通过封装某个序列式容器,并重新组合该容器中包含的成员函数,使其满足某些特定场景的需要。

    容器适配器本质上还是容器,只不过此容器模板类的实现,利用了大量其它基础容器模板类中已经写好的成员函数。当然,如果必要的话,容器适配器中也可以自创新的成员函数。

    STL 提供了 3 种容器适配器,分别为 stack 栈适配器、queue 队列适配器以及 priority_queue 优先权队列适配器 ,容器适配器底层都采用deque实现,这期我们就来聊聊stack栈。

    stack概念

    stack 栈适配器是一种单端开口的容器,实际上该容器模拟的就是栈存储结构,即无论是向里存数据还是从中取数据,都只能从这一个开口实现操作。

    stack 适配器的开头端通常称为栈顶。由于数据的存和取只能从栈顶处进行操作,因此对于存取数据,stack 适配器有这样的特性,即每次只能访问适配器中位于最顶端的元素,也只有移除 stack 顶部的元素之后,才能访问位于栈中的元素。是先进后出的数据结构。

    注意:

    1. top永远指向栈顶元素
    2. 栈容器没有迭代器,因此不支持遍历行为(容器适配器都不支持迭代器)

    stack的API

    1. stack构造函数
    2. stack st;//stack采用模板类实现,stack对象的默认构造形式
    3. stack(const stack& st);//拷贝构造函数
    4. stack赋值操作
    5. stack &operator=(const stack &st);//重载等号操作符
    6. stack数据存取操作
    7. push(elem);//向栈顶添加元素
    8. pop();//从栈顶移除第一个元素
    9. top();//返回栈顶元素
    10. stack大小操作
    11. empty();//判断堆栈是否为空
    12. size();//返回堆栈的大小

    1. int main()
    2. {
    3. stack<int> s;//容器适配器不支持初始化列表创建
    4. //元素入栈
    5. s.push(10);
    6. s.push(20);
    7. s.push(30);
    8. s.push(40);
    9. s.push(50);
    10. if(!s.empty())
    11. {
    12. cout<<"栈的大小:"<size()<
    13. }
    14. // 元素依次出栈
    15. while(!s.empty())
    16. {
    17. // 打印栈顶元素,打印出:50 40 30 20 10
    18. cout << s.top() << endl;
    19. // 出栈
    20. s.pop();
    21. }
    22. }

     感谢观看,订阅此专栏!

  • 相关阅读:
    一个对安卓日志输出功能的优化
    本周大新闻|7-11便利店测试AR远程购物,PICO商店支持退款
    MAC电脑运行windows程序或者游戏怎么办,crossover介绍,
    【Java 基础篇】Java TreeSet 详解:红黑树实现的有序集合
    IaaS,PaaS,SaaS 的区别
    72. 编辑距离
    【我的渲染技术进阶之旅】如何编译Filament的windows版本程序?
    PMP每日一练 | 考试不迷路-11.09(包含敏捷+多选)
    《大数据之路:阿里巴巴大数据实践》-第1篇 数据技术篇 -第3章数据同步
    CentOS7 安装redis数据库 问题记录
  • 原文地址:https://blog.csdn.net/weixin_51609435/article/details/126375713