zoukankan      html  css  js  c++  java
  • 【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;
    }

  • 相关阅读:
    How to Install Tomcat
    使用Application_Error捕获站点错误并写日志
    安装 SQL Server2008 安装程序规则支持提示“重新启动计算机”失败
    历史执行Sql语句性能分析 CPU资源占用时间分析
    返回List的分页方法
    @@IDENTITY与SCOPE_IDENTITY()
    Debugging Failed Because Integrated Windows Authentication Is Not Enabled
    一般经验总结
    dom中实现全选复选框的实例。
    dom中表格的修改 增加行例
  • 原文地址:https://www.cnblogs.com/ruan875417/p/4558321.html
Copyright © 2011-2022 走看看