//

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

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

}

stl源码剖析 详细学习笔记stack queue的更多相关文章

  1. stl源码剖析 详细学习笔记 hashtable

    //---------------------------15/03/24---------------------------- //hashtable { /* 概述: sgi采用的是开链法完成h ...

  2. stl源码剖析 详细学习笔记 set map

    // //  set map.cpp //  笔记 // //  Created by fam on 15/3/23. // // //---------------------------15/03 ...

  3. stl源码剖析 详细学习笔记 RB_tree (1)

    // //  RB_tree_STL.cpp //  笔记 // //  Created by fam on 15/3/21. // // #include "RB_tree_STL.h&q ...

  4. stl源码剖析 详细学习笔记heap

    // //  heap.cpp //  笔记 // //  Created by fam on 15/3/15. // // //---------------------------15/03/15 ...

  5. stl源码剖析 详细学习笔记 空间配置器

    //---------------------------15/04/05---------------------------- /* 空间配置器概述: 1:new操作包含两个阶段操作 1>调 ...

  6. stl源码剖析 详细学习笔记 配接器

    //---------------------------15/04/03---------------------------- /* 配接器概述: 1:adapter是一种设计模式:将一个clas ...

  7. stl源码剖析 详细学习笔记 算法(1)

    //---------------------------15/03/27---------------------------- //算法 { /* 质变算法:会改变操作对象之值 所有的stl算法都 ...

  8. stl源码剖析 详细学习笔记 算法总览

    //****************************基本算法***************************** /* stl算法总览,不在stl标准规格的sgi专属算法,都以 *加以标 ...

  9. stl源码剖析 详细学习笔记 RB_tree (2)

    //---------------------------15/03/22---------------------------- //一直好奇KeyOfValue是什么,查了下就是一个和仿函数差不多 ...

随机推荐

  1. SQLSERVER 分区表实战

    背景:对NEWISS数据库创建分区表T_SALES的SQL.按照日期来进行分区步骤:1:创建文件组2:创建数据文件3:创建分区函数4:创建分区方案5:创建表及聚集索引6:导入测试数据(此处略),并查询 ...

  2. linux内核完全剖析——基于0.12内核-笔记(2)-统一编址和独立编址

    IO是什么 ? IO(Input and Output)是输入输出接口.是CPU和其他外部设备(如串口.LCD.触摸屏.LED等)之间通信的接口.一般的,我们说的IO就是指CPU的各种内部或外部外设. ...

  3. PHP学习第一天

    PHP语句是以分号结尾的 单行注释:   //  C++风格的单行注释 #  shell 风格的单行注释  跟python差不多 多行注释: /*......*/  c++风格的多行注释 常量定义: ...

  4. 【[AHOI2013]差异】

    这个题一看就是为后缀家族设计的 我们看到我们要求的这个柿子 \[\sum_{i=1}^n\sum_{j=i+1}^nT_i+T_j-2\times lcp(T_i,T_j)\] 显然的是前面的那些东西 ...

  5. 【转】默认网关有什么用?我应当怎么填写默认网关和DNS呢

    默认网关有什么用?我应当怎么填写默认网关和DNS呢? 目前使用的是pppoe方式上网,无猫,只是将一根入户的网线插在无线路由上面,然后在路由中设置ppoe方式上网,输入帐号密码.一般电脑和手机全设成了 ...

  6. 列表操作方法,元祖,for循环嵌套

    li = ['alex','wusir''女神']增 1.增加到列表末位 li.append() 连续增加,输入q停止 li = ['alex','wusir''女神'] while 1: s = i ...

  7. bip44

    BIP: Layer: Applications Title: Multi-Account Hierarchy for Deterministic Wallets Author: Marek Pala ...

  8. django表格form无法保存评论排查步骤

    初学django项目,在网上找了个blog教程,还是很不错的,这里感谢一下博主https://www.zmrenwu.com/post/2/ 这个项目适合django初学者,是一个完整的blog项目 ...

  9. 教你一些Linux中隐藏bash历史命令的小技巧

    导读 如果你登录过 Linux 系统,并敲过一些命令,那你应该知道,bash history 会记录你输入的所有命令.这个操作其实是有一定风险的. 我个人经常使用 Linux,所以我想着研究一番,看看 ...

  10. iis配置绑定二级域名的问题

    最近用destoon给客户做一个网站,涉及到站内企业网站的二级域名解析的问题,iis怎么配置绑定子目录绑定二级域名呢,查了好多资料,没有一个给出具体步骤的 基本是一些概念,不过看了这些东西基本理解了泛 ...