STL源碼分析之stack,queue

stack是把容器封裝後的產物,底層實現是deque容器,只是改變了容器的接口,所有代碼就簡單得多

template <class T, class Sequence = deque<T> >
template <class T, class Sequence>
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:
    //底層的容器deque
    Sequence c;
public:
    //都是直接調用deque的內部操作函數
    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;
}

queue同樣是依靠deque來實現,注意它和stack都不支持元素的遍歷操作,因爲它裏面壓根沒有迭代器定義。

發佈了36 篇原創文章 · 獲贊 15 · 訪問量 5931
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章