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是什么,查了下就是一个和仿函数差不多 ...
随机推荐
- TCP是如何实现三次握手的?
什么是三次握手 TCP是网络传输层的协议,提供面向连接的可靠的字节流服务,要通信得先建立连接 所谓三次握手就是指,建立一个TCP连接时,需要CLient与Server发送三个包,确认连接的建立 这一过 ...
- Linux命令(自学)
1.立刻关机: shutdown -h now 2.立刻重启: shutdown -r now reboot 3.注销: logout 4.进入vi编辑器,写一个hello的java程序: vi he ...
- 跨过Django的坑
在最近的Django的学习中,慢慢的开始踩坑,开此栏,专为收纳Django的坑,在以后的学习中以便警示.(使用工具为pycharm专业版2018.2.4,python3.5.2,Django版本2.1 ...
- Mysql binlog 无法删除(purge命令无法删除)
1.版本 1)操作系统 cat /etc/issueCentOS release 6.6 (Final)Kernel \r on an \m cat /proc/versionLinux versio ...
- nmcli 命令使用
nmcli 是 NetworkManager 的控制客户端,通过 man 查看可知: NMCLI(1) General Commands Manual NMCLI(1) NAME nmcli - co ...
- crontab 命令使用
什么是crontab? crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行. ...
- 【排序算法】冒泡排序(Bubble Sort)
0. 说明 参考 维基百科中的冒泡排序 冒泡排序 (Bubble Sort) 是与插入排序拥有相等的执行时间,但是两种算法在需要的交换次数却很大地不同. 在最坏的情况,冒泡排序需要 O(n2) 次交 ...
- extern “C”的作用详解
extern "C"的主要作用就是为了能够正确实现C++代码调用其他C语言代码.加上extern "C"后,会指示编译器这部分代码按C语言的进行编译,而不是C+ ...
- [BZOJ 4763]雪辉
[BZOJ 4763] 雪辉 题意 给定一棵 \(n\) 个点的无根树, 点带权. \(q\) 次询问, 每次给定树上的若干路径, 求这些路径上的点共有多少种不同权值以及这些点的权值组成的集合的 \( ...
- Vue2.0中v-for迭代语法变化(key、index)【转】
转自:http://blog.csdn.net/sinat_35512245/article/details/53966788 Vue2.0的代码中发现 $key这个值并不能渲染成功,问题如下:但是v ...