//

//  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. EntityFramework Code-First 简易教程(三)-------数据库初始化

    现在我们来学习,当数据库初始化的时候,Code First怎样设置数据库的名字. 下面的图显示了数据库初始化的工作流程,根据传入给context基类的构造函数的参数来初始化: 根据上面的图,conte ...

  2. Django之基于iframe的ajax伪造

    IFRAME是HTML标签,作用是文档中的文档,或者浮动的框架(FRAME).iframe元素会创建包含另外一个文档的内联框架 ajax的理念是不进行浏览器页面刷新的信息获取更新,也就是局部刷新. 那 ...

  3. python基础学习3----列表

    一.字符格式化输出 占位符 %s s = string 字符串           %d d = digit 整数           %f f = float 浮点数 name = input(&q ...

  4. No module named 'MySQLdb' Python3 + Django 2.0.3 + mysql 无法连接

    问题概览: 学习Django连接mysql数据库的时候遇到了问题 首先安装mysql(Python 3不支持MySQL-python): pip install pymysql 进入编辑 settin ...

  5. Python学习---Python环境变量安装问题0907

    问题背景: 重新安装操作系统后,原来的环境变量丢失[因Python3.5安装目录是E盘,文件还在,只是丢失了环境变量而已,添加即可] 问题解决: 方法一:使用cmd命令添加path环境变量 在cmd下 ...

  6. mybatis 反向生成步骤

    Mybatis 反向生成. 反向生成的步骤: 反向生成的文件 打开文件夹显示 3.打开generator.xml文件 更改配置信息  路径一般情况下用英文  中文的路径有些会识别不了  或产生乱码 4 ...

  7. TIDB单机多实例进程

    TIDB节点: TIKV节点(tidb服务也有放在这里也有) tidb进程 tikv进程 当使用单机多实例(就是一个机器多个tikv的存储节点)的时候,每个实例都有对应的一个进程,这个进程号就是我们在 ...

  8. 乘风破浪:LeetCode真题_023_Merge k Sorted Lists

    乘风破浪:LeetCode真题_023_Merge k Sorted Lists 一.前言 上次我们学过了合并两个链表,这次我们要合并N个链表要怎么做呢,最先想到的就是转换成2个链表合并的问题,然后解 ...

  9. JS中的防抖与节流

    什么是防抖?and什么是节流?一起来开心的学习下吧. 首先什么是防抖:就是在一定的时间内事件只发生一次,比如你点击button按钮,1秒内任你单身30年手速点击无数次,他也还是只触发一次.举个例子,当 ...

  10. android studio 导入module作为lib使用

    1.将 android module导入 android project 中  2.在要作为lib导入的module 的build.gradle文件中添加一行 “apply plugin: ‘andr ...