当前位置:首页 » 《休闲阅读》 » 正文

【C++航海王:追寻罗杰的编程之路】stack

14 人参与  2024年03月25日 09:17  分类 : 《休闲阅读》  评论

点击全文阅读


目录

1 -> stack的介绍和使用

1.1 -> stack的介绍

1.2 -> stack的使用

1.3 -> stack的模拟实现


1 -> stack的介绍和使用

1.1 -> stack的介绍

stack的文档介绍

1. stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。

2. stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。

3. stack的底层容器可以是任何标准的容器类模板或一些其他特定的容器类,这些容器类应该支持以下操作:

empty: 判空操作back: 获取尾部元素操作push_back: 尾部插入元素操作pop_back: 尾部删除元素操作

4. 标准容器vector、deque、list均符合这些需求,默认情况下,如果没有为stack指定特定的底层容器,默认情况下使用deque。

1.2 -> stack的使用

函数说明接口说明
stack()构造空的栈
empty()检测stack是否为空
size()返回stack中元素的个数
top()返回栈顶元素的引用
push()将元素val压入stack中
pop()将stack中尾部的元素弹出

相关题目:

最小栈

class MinStack {public:    void push(int val)     {        st.push(val);        if (Min.empty() || val <= Min.top())            Min.push(val);    }        void pop()     {        if (Min.top() == st.top())            Min.pop();        st.pop();    }        int top()     {        return st.top();    }        int getMin()     {        return Min.top();    }private:    stack<int> st;    stack<int> Min;};

栈的压入、弹出序列

class Solution {public:    bool IsPopOrder(vector<int>& pushV, vector<int>& popV)     {        if (pushV.size() != popV.size())            return false;                int in = 0;        int out = 0;        stack<int> st;        while (out < popV.size())        {            while (st.empty() || st.top() != popV[out])            {                if (in < pushV.size())                    st.push(pushV[in++]);                else                    return false;            }            st.pop();            out++;        }        return true;    }};

1.3 -> stack的模拟实现

从栈的接口可以看出,栈实际是一种特殊的vector,因此使用vector完全可以模拟实现stack。

#define  _CRT_SECURE_NO_WARNINGS 1#include<vector>#include<deque>using namespace std;namespace fyd{template<class T, class Container = deque<T>>class stack{public:void push(const T& x){_con.push_back(x);}void pop(){_con.pop_back();}const T& top(){return _con.back();}bool empty(){return _con.empty();}size_t size(){return _con.size();}private:Container _con;};}

感谢各位大佬支持!!!

互三啦!!!


点击全文阅读


本文链接:http://zhangshiyu.com/post/85056.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1