zoukankan      html  css  js  c++  java
  • stl源码剖析 详细学习笔记stack queue

    //

    //  stack.cpp

    //  笔记

    //

    //  Created by fam on 15/3/15.

    //

    //


    //---------------------------15/03/15----------------------------


    //stack

    {

        /*  

            stack概述:

         

            stack只采用deque的底部操作,封装了deque,形成stack

            这种方式是常见的adapter设计模式,stack往往不被归类为container

            而是被归类为 container adapter

        */

        

        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;

        }

        

        

        //stack没有迭代器,所有的元素都必须符合先进后出的条件,所以不提供访问其他元素的迭代器

        

    }


    //queue


    {

        //queue 先进后出 可以用deque作为底层结构

        

        

        template <class T, class Sequence = deque<T> >

        class queue

        {

            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 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();}

        };

        

        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也没有迭代器

      //总结: 这两个数据结构毫无难度


    }

  • 相关阅读:
    管理索引表:深入研究B树索引重建,合并,删除(理论篇3)
    关于ASP.NET中Membership进行权限管理不足的解决办法
    将VS2005中的.CS文件在网页中显示的方法
    在页面中直接设计TreeView的节点而不使用Web.Sitemap文件在运行时出错
    (转)动态管理ASP.NET DataGrid数据列
    在页面中直接设计TreeView的节点而不使用Web.Sitemap文件在运行时出错
    将VS2005中的.CS文件在网页中显示的方法
    三天没有更新我的BLOG
    三天没有更新我的BLOG
    (转)动态管理ASP.NET DataGrid数据列
  • 原文地址:https://www.cnblogs.com/boydfd/p/4983171.html
Copyright © 2011-2022 走看看