stack是一种先进先出(First In Last Out, FILO)的数据结构。它只有一个出口。stack允许新增元素、移除元素、取得最顶端元素。它只有一个出口;stack允许新增元素、移除元素、取得最顶端元素。单除了最顶端外,没有任何其它方法可以存取stack的其它元素。换言之,stack不许与有遍历行为。

         根据stack的性质,可知stack可用之前介绍的vector,list,deque做为底层的实现进行处理;

stack的定义如下

template<class T, class Sequence = deque<T>>
class stack {
    friend bool operator == __STL_NULL_TMPL_ARGS(const stack&, const stack&);
    friend bool operator < __STL_NULL_TMPL_ARGS(const stack&, const stack&);
public:
    typedef typename Sequence::value_type value_type;
    typedef typename Sequence::size_type  size_type;
    typedef typename Sequence::reference  reference;
    typedef typename Sequence::const_reference const_reference;
protected:
    Sequence c;
public:
    bool empty() const {return c.empty();}
    size_type size() const {return c.size();}
    reference top() {return c.back();}
    const_reference top() const {return c.back();}
    void push(const value_type&x) {c.push_back(x);}
    void pop() {c.pop_back();}
};

template <class T, class Sequence>
bool operator == (const stack<T, Sequence>& x, const stack<T,Sequence>&y) {
    return x.c == y.c;
}


template <class T, class Sequence>
bool operator <  (const stack<T, Sequence>& x, const stack<T,Sequence>&y) {
    return x.c <  y.c;
}

从以上定义可知,只需要实现了empty(),size(),back(),push_back(),pop_back()及operator ==及<的容器都可作为stack的容器;

如需将stack的底层容器换成list;只需定义时增加Sequence参数即可

stack<int, list<int>> istack;

stack只能访问栈尾的元素;所以不能对数据进行遍历;所以没有对外可访问的迭代器;

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部