zoukankan      html  css  js  c++  java
  • STL源代码剖析 容器 stl_stack.h

    本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie


    stack

    -------------------------------------------------------------
    stack 是一种配接器(adapter)。以某种容器作为底部结构,改变其接口,使之符合"先进后出"的特性。
    SGI STL 默认以 deque 为 stack 底部结构
    没有遍历行为,没有遍历器
    演示样例:
    #include <stack>
    #include <list>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    
    
    int main(){
    	stack<int, list<int> >istack;
    	istack.push(1);
    	istack.push(2);
    	cout << istack.size() << endl
    		 << istack.top() << endl;
    }

    源代码:
    #ifndef __SGI_STL_INTERNAL_STACK_H
    #define __SGI_STL_INTERNAL_STACK_H
    
    
    __STL_BEGIN_NAMESPACE
    
    
    #ifndef __STL_LIMITED_DEFAULT_TEMPLATES
    template <class T, class Sequence = deque<T> > //默认以 deque 为底层容器
    #else
    template <class T, class Sequence>
    #endif
    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:
      //下面全然利用 Sequence c 的操作完毕 stack 的操作
      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(); }
      //改动接口使符合 stack "前进后出"的特性
      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;
    }
    
    
    __STL_END_NAMESPACE
    
    
    #endif /* __SGI_STL_INTERNAL_STACK_H */
    
    
    // Local Variables:
    // mode:C++
    // End:


  • 相关阅读:
    I/O多路复用和Socket
    我读过的最好的epoll讲解--转自”知乎“
    gcc和g++的区别
    详解派生类构造函数与析构函数
    C++中构造函数,拷贝构造函数和赋值函数的区别和实现
    浅拷贝和深拷贝的区别?
    曲演杂坛--特殊字符/生僻字与varchar
    SQL SERVER--单回话下的死锁
    曲演杂坛--表变量的预估行数
    曲演杂坛--为什么SELECT语句会被其他SELECT阻塞?
  • 原文地址:https://www.cnblogs.com/wzjhoutai/p/7103200.html
Copyright © 2011-2022 走看看