STL学习(自学手册+源码分析)之RB -tree
1.1 RB-tree
1.1.1 RB-tree主体部分![](/assets/blank.gif)
template <class Key, class Value, class KeyOfValue, class Compare,class Alloc = alloc>
class rb_tree {protected:typedef void* void_pointer;typedef __rb_tree_node_base* base_ptr;typedef __rb_tree_node<Value> rb_tree_node;typedef simple_alloc<rb_tree_node, Alloc> rb_tree_node_allocator;typedef __rb_tree_color_type color_type;
public:typedef Key key_type;typedef Value value_type;typedef value_type* pointer;typedef const value_type* const_pointer;typedef value_type& reference;typedef const value_type& const_reference;typedef rb_tree_node* link_type;typedef size_t size_type;typedef ptrdiff_t difference_type;
protected:link_type get_node() { return rb_tree_node_allocator::allocate(); }void put_node(link_type p) { rb_tree_node_allocator::deallocate(p); }link_type create_node(const value_type& x) {link_type tmp = get_node();__STL_TRY {construct(&tmp->value_field, x);}__STL_UNWIND(put_node(tmp));return tmp;}link_type clone_node(link_type x) {link_type tmp = create_node(x->value_field);tmp->color = x->color;tmp->left = 0;tmp->right = 0;return tmp;}void destroy_node(link_type p) {destroy(&p->value_field);put_node(p);}protected:size_type node_count; // rb_tree的大小(节点数量)link_type header; //指向节点指针Compare key_compare;//提供的比较器(函数对象)
....
};
注意这里的Value
是由key|data
两者合成而来的。
1.1.2 RB-tree节点类型
struct __rb_tree_node_base
{typedef __rb_tree_color_type color_type;typedef __rb_tree_node_base* base_ptr;color_type color; base_ptr parent;//父节点base_ptr left;//左边节点base_ptr right;//右边节点static base_ptr minimum(base_ptr x){while (x->left != 0) x = x->left;return x;}static base_ptr maximum(base_ptr x){while (x->right != 0) x = x->right;return x;}
};
template <class Value>
struct __rb_tree_node : public __rb_tree_node_base
{typedef __rb_tree_node<Value>* link_type;Value value_field;
};
STL学习(自学手册+源码分析)之RB -tree相关推荐
- sheng的学习笔记-Vector源码分析
概述 Vector底层也是数组,跟ArrayList很像(先看下ArrayList,再看Vector会很轻松),ArrayList可参考下文,并且由于效率低,已经被淘汰了,大概瞅瞅得了 sheng的学 ...
- Java设计模式学习以及底层源码分析
源码在分支master 工厂模式 把具体创建产品的细节封装起来,你要什么产品,我给你什么产品即可. 简单工厂模式 工厂方法模式 缓存层:抽象类 抽象工厂模式 缓存层是:接口 原型模式 问题: 原型模式 ...
- Licode入门学习:MediaStream源码分析(二)
Licode服务与启动过程分析 MediaStream源码分析(一) MediaStream源码分析(二) MediaStream源码分析(三) WebRtcConnection源码分析(一) Web ...
- Licode入门学习:MediaStream源码分析(三)
Licode服务与启动过程分析 MediaStream源码分析(一) MediaStream源码分析(二) MediaStream源码分析(三) WebRtcConnection源码分析(一) Web ...
- Licode入门学习:WebRtcConnection源码分析(一)
Licode服务与启动过程分析 WebRtcConnection源码分析(一) WebRtcConnection源码分析(二) WebRtcConnection源码分析(三) MediaStream源 ...
- Licode入门学习:MediaStream源码分析(一)
Licode服务与启动过程分析 MediaStream源码分析(一) MediaStream源码分析(二) MediaStream源码分析(三) WebRtcConnection源码分析(一) Web ...
- Licode入门学习:WebRtcConnection源码分析(二)
Licode服务与启动过程分析 WebRtcConnection源码分析(一) WebRtcConnection源码分析(二) WebRtcConnection源码分析(三) MediaStream源 ...
- Licode入门学习:WebRtcConnection源码分析(三)
Licode服务与启动过程分析 WebRtcConnection源码分析(一) WebRtcConnection源码分析(二) WebRtcConnection源码分析(三) MediaStream源 ...
- Netty学习十七:源码分析之HashWheelTimer
一.常见定时任务实现 定时器的使用场景包括:成月统计报表.财务对账.会员积分结算.邮件推送等,它一般有三种表现形式:按固定周期定时执行.延迟一定时间后执行.指定某个时刻执行. 定时器的本质是设计一种数 ...
最新文章
- C#苹果应用开发——第一讲初始Xamarin
- PHP学习笔记6:面向对象的PHP
- WPF自定义控件(1)——仪表盘设计[1]
- fastjson json串转list
- [InnoDB系列] -- SHOW INNODB STATUS 探秘
- BugkuCTF–flag在index里
- jQuery学习笔记(四)——表单选择
- FlinkX 如何读取和写入 Clickhouse?
- pythonelectron桌面开发案例_electron vue桌面应用入门实例
- Oracle数据库事务回滚和提交,数据库 事务提交和回滚
- 揭开HTTPS的神秘面纱
- sqlserver oracle对比,sqlserver和oracle常用函数对比
- 算法第四版 课后习题答案
- 1047: 对数表 ZZULIOJ
- excel2007不显示文件名
- P1162 填涂颜色(BFS)
- 学英语《每日一歌》之Traveling Light
- 使360浏览器打开网页默认为极速模式
- MeeGo开发者(二):MeeGo架构
- android逆向分析so,Android逆向——so反编译分析由浅入深(回帖奖励)
热门文章
- python 文件读写with open模式r,r+ w,w+ a,a+区别详解
- 7-1 重要的话说三遍
- 数星星 ← 树状数组
- 群智能算法改进第四期-改进灰狼优化算法
- Android实现仿真iPhone界面
- 4G/5G多卡聚合设备在公安无线传输中的解决方案
- HTML5 标准规范
- 让 AirDrop 支持有线传输,甚至让不支持 AirDrop 的 Mac 也能使用该功能 黑苹果也可以的哦
- Linux驱动开发学习笔记【12】:Linux自带LED灯驱动
- JAVA中医药院校科研会议系统计算机毕业设计Mybatis+系统+数据库+调试部署