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是什么,查了下就是一个和仿函数差不多 ...
随机推荐
- EntityFramework Code-First 简易教程(三)-------数据库初始化
现在我们来学习,当数据库初始化的时候,Code First怎样设置数据库的名字. 下面的图显示了数据库初始化的工作流程,根据传入给context基类的构造函数的参数来初始化: 根据上面的图,conte ...
- Django之基于iframe的ajax伪造
IFRAME是HTML标签,作用是文档中的文档,或者浮动的框架(FRAME).iframe元素会创建包含另外一个文档的内联框架 ajax的理念是不进行浏览器页面刷新的信息获取更新,也就是局部刷新. 那 ...
- python基础学习3----列表
一.字符格式化输出 占位符 %s s = string 字符串 %d d = digit 整数 %f f = float 浮点数 name = input(&q ...
- No module named 'MySQLdb' Python3 + Django 2.0.3 + mysql 无法连接
问题概览: 学习Django连接mysql数据库的时候遇到了问题 首先安装mysql(Python 3不支持MySQL-python): pip install pymysql 进入编辑 settin ...
- Python学习---Python环境变量安装问题0907
问题背景: 重新安装操作系统后,原来的环境变量丢失[因Python3.5安装目录是E盘,文件还在,只是丢失了环境变量而已,添加即可] 问题解决: 方法一:使用cmd命令添加path环境变量 在cmd下 ...
- mybatis 反向生成步骤
Mybatis 反向生成. 反向生成的步骤: 反向生成的文件 打开文件夹显示 3.打开generator.xml文件 更改配置信息 路径一般情况下用英文 中文的路径有些会识别不了 或产生乱码 4 ...
- TIDB单机多实例进程
TIDB节点: TIKV节点(tidb服务也有放在这里也有) tidb进程 tikv进程 当使用单机多实例(就是一个机器多个tikv的存储节点)的时候,每个实例都有对应的一个进程,这个进程号就是我们在 ...
- 乘风破浪:LeetCode真题_023_Merge k Sorted Lists
乘风破浪:LeetCode真题_023_Merge k Sorted Lists 一.前言 上次我们学过了合并两个链表,这次我们要合并N个链表要怎么做呢,最先想到的就是转换成2个链表合并的问题,然后解 ...
- JS中的防抖与节流
什么是防抖?and什么是节流?一起来开心的学习下吧. 首先什么是防抖:就是在一定的时间内事件只发生一次,比如你点击button按钮,1秒内任你单身30年手速点击无数次,他也还是只触发一次.举个例子,当 ...
- android studio 导入module作为lib使用
1.将 android module导入 android project 中 2.在要作为lib导入的module 的build.gradle文件中添加一行 “apply plugin: ‘andr ...