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:


  • 相关阅读:
    go excel导入Demo
    redis限流Lua脚本
    线上机器CPU与内存升高排查
    错点
    自动化运维工具——ansible详解(一)
    k8s之命令记录
    k8s之监控集群资源利用率
    根据经纬度搜索附近的人
    微信小程序直接打开h5页面
    【python3】字符串格式化
  • 原文地址:https://www.cnblogs.com/wzjhoutai/p/7103200.html
Copyright © 2011-2022 走看看