• 【STL源码剖析读书笔记】【第4章】序列式容器之stack和queue


    一、stack

    1、stack概述

    stack是一种先进后出(First In LastOut,FILO)的数据结构,它只有一个出口。stack允许新增元素,移除元素、取得最顶端元素,但不允许有遍历行为。

    由于stack系以底部容器完成其所有工作,而具有这种“修改某物接口,形成另一种风貌”之性质者,称为adapter(配接器)。


    2SGI STLdeque作为缺省情况下的stack底部结构。

    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 e ; //底层容器
    public :
    	//以下完全利用Sequence c 的操作,完成stack的操作
    	bool empty() const {return c.empty() ;} 
    	size_type size() {return c.size();}
    	reference top() {return c.back();}
    	const_reference top() const {return c.back();}
    	//deque是两头可进出,stack是末端进,末端出。
    	void push(const value_type& x) {c.push_back(x) ;}
    	void pop() {c.pop_back() ;}
    	
    } ;
    

    3、stack也可以用list作为底层容器,定义:stack<int,list<int>>istack

    #include<stack>
    #include<list>
    #include<algorithm>
    #include <iostream>
    using namespace std;
    
    int main(){
    	stack<int, list<int>> istack;
    	istack.push(1);
    	istack.push(3);
    	istack.push(5);
    	
    	cout << istack.size() << endl; //3
    	cout << istack.top() << endl;//5
    	istack.pop();
    	cout << istack.top() << endl;//3
    	cout << istack.size() << endl;//2
    
    	system("pause");
    	return 0;
    }
    

    二、queue

    1、 queue概述

    queue是一种先进先出(First In FirstOut,FIFO)的数据结构,它有两个出口。queue允许新增元素、移除元素、从最底端加入元素、取得最顶端元素,但不允许遍历行为。


    2、SGISTL以deque作为缺省情况下的queue底部结构。

    template<class T, class Sequence = dique<T> >
    class queue{
    	
    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的操作,完成queue的操作
    	bool empty() const {return c.empty();}
    	size_type size() const {return c.size();}
    	reference front() const {return c.front();}
    	const_reference front() const {return c.front();}
    	//deque是两头可进出,queue是末端进,前端出。
    	void push(const value_type &x) {c.push_back(x) ;} 
    	void pop() {c.pop_front();}
    } ;
    

    3、queue也可以用list作为底层容器,定义:queue<int,list<int>>iqueue

    #include<queue>
    #include<list>
    #include<algorithm>
    #include <iostream>
    using namespace std;
    
    int main(){
    	queue<int, list<int>> iqueue;
    	iqueue.push(1);
    	iqueue.push(3);
    	iqueue.push(5);
    	
    	cout << iqueue.size() << endl; //3
    	cout << iqueue.front() << endl;//1
    	iqueue.pop();
    	cout << iqueue.front() << endl;//3
    	cout << iqueue.size() << endl;//2
    
    	system("pause");
    	return 0;
    }

  • 相关阅读:
    【梦话区】一直迷茫的net小伙
    【ASP.NET】登陆成功后如何跳转到上一个页面
    【C#】强类型DataSet实现登录次数限制
    【ASP.NET】ItemDataBound之repeater 和 listview
    【网页设计】框架的高度随框架里面的内容的多少而改变——转
    【连载】Scala程序设计:Java虚拟机多核编程实战——简介
    博客园图灵杯第五届博问大赛(2010.8.3~2010.9.2)
    【连载】高效人士的116个IT秘诀(第2版)——秘诀23早晨就来一次突破
    图灵2010.08书讯
    图灵五周年生日聚会圆满成功,多家媒体对此进行报道
  • 原文地址:https://www.cnblogs.com/ruan875417/p/4558321.html
Copyright © 2020-2023  润新知