zoukankan      html  css  js  c++  java
  • STL源码阅读(五)

    STL源码阅读(五) (SGI STL v3.3)

    stl_stack.h (<stack>)

    // 容器适配器stack
    template <class _Tp, class _Sequence = std::deque<_Tp>>
    class stack { 
        _Sequence c;
     ...
        // 注意stack的函数接口的实现
        // 即_Sequence需要实现back, push_back, pop_back, empty, size接口
        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(); }
     ...
    }

    stl_queue.h (<queue>)

    // 容器适配器queue
    template <class _Tp, class _Sequence = std::deque<_Tp>>
    class queue {
        _Sequence c;
     ...
        // 注意queue的函数接口实现
        // 即_Sequence需要实现back,front,push_back, pop_back, empty, size接口 
      bool empty() const { return c.empty(); }
      size_type size() const { return c.size(); }
      reference front() { return c.front(); }
      const_reference front() const { return c.front(); }
      reference back() { return c.back(); }
      const_reference back() const { return c.back(); }
      void push(const value_type& __x) { c.push_back(__x); }
      void pop() { c.pop_front(); }
     ...
    }
    // 容器适配器priority_queue
    template <class _Tp, 
              class _Sequence __STL_DEPENDENT_DEFAULT_TMPL(vector<_Tp>),
              class _Compare
              __STL_DEPENDENT_DEFAULT_TMPL(less<typename _Sequence::value_type>) > {
          _Sequence c;
          _Compare comp;
     ...
        // _Sequence需要实现front, push_back, pop_back, empty, size接口
        // 此外由其构造函数,可知priority_queue是以堆实现的,而make_heap需要随机迭代器,
        // 因此_Sequence的迭代器类型应该是random_access_iterator_tag
         priority_queue(const _Compare& __x, const _Sequence& __s) 
        : c(__s), comp(__x) 
        { make_heap(c.begin(), c.end(), comp); }
     ...
    } 

    参考资料

    1. sgi STL
    2. cppreference.com
  • 相关阅读:
    hdoj 1002大数加法
    nuxt踩坑
    vue 打包上线后 css3渐变属性丢失的问题解决方案
    linux下crontab不能运行问题
    [转]谈谈数据库的ACID
    web集群时session共享
    redis缓存队列+MySQL +php任务脚本定时批量入库
    Yii2 加载css、js 载静态资源
    PHP实现四种基本排序算法
    phpstorm快捷键
  • 原文地址:https://www.cnblogs.com/corfox/p/6063304.html
Copyright © 2011-2022 走看看