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也没有迭代器
//总结:
这两个数据结构毫无难度
}
stl源码剖析 详细学习笔记stack queue的更多相关文章
- stl源码剖析 详细学习笔记 hashtable
//---------------------------15/03/24---------------------------- //hashtable { /* 概述: sgi采用的是开链法完成h ...
- stl源码剖析 详细学习笔记 set map
// // set map.cpp // 笔记 // // Created by fam on 15/3/23. // // //---------------------------15/03 ...
- stl源码剖析 详细学习笔记 RB_tree (1)
// // RB_tree_STL.cpp // 笔记 // // Created by fam on 15/3/21. // // #include "RB_tree_STL.h&q ...
- stl源码剖析 详细学习笔记heap
// // heap.cpp // 笔记 // // Created by fam on 15/3/15. // // //---------------------------15/03/15 ...
- stl源码剖析 详细学习笔记 空间配置器
//---------------------------15/04/05---------------------------- /* 空间配置器概述: 1:new操作包含两个阶段操作 1>调 ...
- stl源码剖析 详细学习笔记 配接器
//---------------------------15/04/03---------------------------- /* 配接器概述: 1:adapter是一种设计模式:将一个clas ...
- stl源码剖析 详细学习笔记 算法(1)
//---------------------------15/03/27---------------------------- //算法 { /* 质变算法:会改变操作对象之值 所有的stl算法都 ...
- stl源码剖析 详细学习笔记 算法总览
//****************************基本算法***************************** /* stl算法总览,不在stl标准规格的sgi专属算法,都以 *加以标 ...
- stl源码剖析 详细学习笔记 RB_tree (2)
//---------------------------15/03/22---------------------------- //一直好奇KeyOfValue是什么,查了下就是一个和仿函数差不多 ...
随机推荐
- Oracle EBS AP 供应商API
--创建供应商地址上的电话号码 created by jenrry 20170419 DECLARE l_return_status VARCHAR2(1); l_msg_count NUMBER; ...
- 使用动态SQL创建数据库
/*其实我也搞不懂为什么要用SQL来创建,明明SQL Server有图形化创建数据库多省事啊!*/USE master; DECLARE @sqlstr nvarchar(max)/*定义一个变量* ...
- http的断点续传
要实现断点续传的功能,通常都需要客户端记录下当前的下载进度,并在需要续传的时候通知服务端本次需要下载的内容片段. HTTP1.1协议(RFC2616)中定义了断点续传相关的HTTP头 Range和Co ...
- [IDEA_1] IDEA 使用指南
1. IDEA 安装与配置 具体细节待补充... 2. 优化编程体验 2.1.1 新建类后自动添加自定义的注释 在主界面使用快捷键 Ctrl + Alt + S 进入 Settings 页面 依次打开 ...
- windows服务器安装telnet的方法指引
摘要: 1.telnet是一种网络排查的工具 2.当发现一台服务器异常的时候,通常有两个cmd命名做排查 3.ping 服务器ip,看网络是否联通 4.telnet 服务器ip 端口 看该服务器指定端 ...
- opensuse编译安装Python3后缺少zlib
目录 opensuse编译安装Python3后缺少zlib 前言 编译安装 python导入zlib 重新编译python并指定zlib opensuse编译安装Python3后缺少zlib 前言 由 ...
- October 27th, 2017 Week 43rd Friday
The only thing predictable about life is its unpredictability. 人生唯一可以预知的,就是它的变化莫测. Is it really unpr ...
- def chi(*food,**kw):
def chi(*food,**kw): print(food,kw)chi("cong","蒜",'姜','可乐',"J=Juice",a ...
- 极限编程核心价值:简单(Simplicity)
写在前面 在编写 ASP.NET Core 项目时,深感项目设计的无力感,在软件设计方面我还有很长的路要走.我一直以来都把代码当作一种艺术的存在,认为自己是个"艺术家",其实就是个 ...
- 自己写的开源MVC-easyMVC分享
简介 基本风格是按照spring mvc做的,在后期会加入一些新的特性,封装成易于自己项目使用的mvc框架. github地址: https://github.com/tangyanbo/easymv ...