zoukankan      html  css  js  c++  java
  • C++STL特殊容器stack

    stack的基本性能

    stack准确的说并不是STL framework所提供的容器,而是一个为了满足特殊需求而设计的容器。属于容器适配器(container adapter),它提供了简单而清晰的接口满足我们对数据结构堆栈的需求。

    对于stack(也称LIFO,后进先出),我们可以使用 push()将任意数量的元素放入stack内,也可以使用 pop()将元素以其插入的反序从容器中移除。

    上图可以很形象的看出,我们的压入顺序是A->B,待到我们弹出时的顺序就变成了B->A。

    stack使用须知

    1.包含头文件

    1 #include<stack>

    2.在头文件<stack>中,class stack 定义如下

    1 namespace std
    2 {
    3 template <typename T,
    4           typename Container = deque<T>>
    5         class stack;
    6 }

    第一个template参数代表元素类型,带有默认值的第二个template参数用来定义stack内部存放元素的实际容器,默认为deque

    很多人问为什么不用vector,具体原因可能是dequ有移除元素时会自动释放内存,并且不必在重新分配reallocation时复制全部元素的优点。

    3.我们可以自定义stack的内部容器

    stack的实现只是很单纯的把各项操作转化为内部容器的对应调用,事实上,你可以使用任何sequence容器支持stack,只要它们提供函数:back()、push_back()、pop_back。

    举个栗子

    1 stack<int> st;             //定义一个int类型内部为deque的stack
    2 stack<int,vector<int>> st; //定义一个int类型内部为vector的stack

    stack核心操作

    1.核心接口成员函数

    1 st.push();//将一个元素放入stack内
    2 st.top();//返回stack内的“下一个”元素
    3 st.pop();//从stack中移除元素

    注意,pop弹出栈顶元素但不返回它,top返回栈顶元素但不移除它。两者在stack为空时使用会造成不明确的行为,所以在使用前可以采用 empty() 来检验stack是否为空

    2.常用函数

    1 st.size();  //返回stack内元素数量
    2 st.empty(); //返回容器是否为空

    3.comparison的重载

    stack支持两个相同类型间的比较(比较原则是字典序),从栈底元素开始比较

    comparison可以是下列任何运算:==、 !=、 >=、 <=、 >、 <。

     

    本文主要针对的是竞赛方向的stack使用,没有涉及更深度的使用,若有错误,请提出指正。

    如果能帮助到您,我会非常开心QWQ

    2019-01-31

  • 相关阅读:
    羊年春节微信数据大解析
    微信公众号推荐(自己关注的微信公众平台导航)
    微信要革"传统电视"的命吗?
    微信是在学苹果模式吗?
    发微信红包啦!借花献佛
    有原创保护能力的公众帐号可申请页面模版功能和图文消息正文插入历史群发链接
    编程能力与编程年龄
    代码执行的效率
    对九个超级程序员的采访
    编程真难啊
  • 原文地址:https://www.cnblogs.com/cloudplankroader/p/10344203.html
Copyright © 2011-2022 走看看