STL源码分析-AVL树-RB树
AVL树
- 不平衡情况
- 插入节点位于左子节点的左子树(左左)
- 插入节点位于左子节点的右子树(左右)
- 插入节点位于右子节点的左子树(右左)
- 插入节点位于右子节点的右子树(右右)
- 左左、右右为外侧插入,左右、右左为内侧插入
- 左左:祖父节点右旋
- 右右:祖父节点左旋
- 左右:祖父节点右旋,更新祖父节点,祖父节点左旋
右左:祖父节点左旋,更新祖父节点,祖父节点右旋
RB树
- 定义
- 非红即黑
- 根为黑色
- 红节点子全黑
任一节点至叶节点路径黑节点数相同
permutation
- next_permutation
- 从后向前找到第一对相邻增序元素
- 从后向前找到第一个大于相邻元素中前一个元素,并交换两值
- 将相邻增序中后一个元素到结尾的逆序处理
- prev_permutation
- 从后向前找到第一对相邻降序元素
- 从后向前找到第一个小于相邻元素中前一个元素,并交换两值
将相邻降序中后一个元素到结尾的元素逆序处理
SORT
- stl-SORT:
- 快排
- 低于门限值使用insert_sort
- 递归层次过深,使用heap_sort
STL源码分析-AVL树-RB树的更多相关文章
- STL源码分析《4》----Traits技术
在 STL 源码中,到处可见 Traits 的身影,其实 Traits 不是一种语法,更确切地说是一种技术. STL库中,有一个函数叫做 advance, 用来将某个迭代器(具有指针行为的一种 cla ...
- STL源码分析《3》----辅助空间不足时,如何进行归并排序
两个连在一起的序列 [first, middle) 和 [middle, last) 都已经排序, 归并排序最核心的算法就是 将 [first, middle) 和 [middle, last) 在 ...
- STL 源码分析《1》---- list 归并排序的 迭代版本, 神奇的 STL list sort
最近在看 侯捷的 STL源码分析,发现了以下的这个list 排序算法,乍眼看去,实在难以看出它是归并排序. 平常大家写归并排序,通常写的是 递归版本..为了效率的考虑,STL库 给出了如下的 归并排序 ...
- STL源码分析读书笔记--第二章--空间配置器(allocator)
声明:侯捷先生的STL源码剖析第二章个人感觉讲得蛮乱的,而且跟第三章有关,建议看完第三章再看第二章,网上有人上传了一篇读书笔记,觉得这个读书笔记的内容和编排还不错,我的这篇总结基本就延续了该读书笔记的 ...
- STL 源码分析《2》----nth_element() 使用与源码分析
Select 问题: 在一个无序的数组中 找到第 n 大的元素. 思路 1: 排序,O(NlgN) 思路 2: 利用快排的 RandomizedPartition(), 平均复杂度是 O(N) 思路 ...
- stl源码分析之allocator
allocator封装了stl标准程序库的内存管理系统,标准库的string,容器,算法和部分iostream都是通过allocator分配和释放内存的.标准库的组件有一个参数指定使用的allocat ...
- STL源码分析与实现-stl_list容器
1. stl_list 介绍 今天我们来总结一下stl_List, 通过之前介绍单链表的文章,其实对链表的基本操作已经十分熟悉了,那对于stl_list,无非就是链表结构不一样,至于其中的增删改查的细 ...
- STL 源码分析六大组件-allocator
1. allocator 基本介绍 分配器(allocator))是C ++标准库的一个组件, 主要用来处理所有给定容器(vector,list,map等)内存的分配和释放.C ++标准库提供了默认使 ...
- STL源码分析之迭代器
前言 迭代器是将算法和容器两个独立的泛型进行调和的一个接口. 使我们不需要关系中间的转化是怎么样的就都能直接使用迭代器进行数据访问. 而迭代器最重要的就是对operator *和operator-&g ...
随机推荐
- PHP 正则表达式常用函数使用小结
在PHP中有两套正则表达式函数库.一套是由PCRE(Perl Compatible Regular Expression)库提供的.PCRE库使用和Perl相同的语法规则实现了正则表达式的模式匹配,其 ...
- ClassLoader 机制
JAVA启动后,是经过JVM各级ClassLoader来加载各个类到内存.为了更加了解加载过程,我通过分析和写了一个简单的ClassLoader来粗浅的分析它的原理. JVM的ClassLoader分 ...
- CF 500 B. New Year Permutation 并查集
User ainta has a permutation p1, p2, ..., pn. As the New Year is coming, he wants to make his permut ...
- wamp
安装好wamp,但是图片没有变绿,大部分原因是80端口被占用. 修改端口号:可以从文件httpd.conf 将# Change this to Listen on specific IP addres ...
- mysqli 操作数据库
从php5.0开始增加mysql(i)支持 , 新加的功能都以对象的形式添加 i表示改进的意思 功能多.效率高.稳定 编译时参数: ./configure --with-mysql=/usr/bin/ ...
- Hibernae 的延迟加载
http://blog.csdn.net/xc635960736/article/details/7049863 Hibernae 的延迟加载 Hibernae 的延迟加载是一个非常常用的技术,实 ...
- 树莓派学习:源码方式安装opencv
1:下载若干依赖项: 更新软件源:sudo apt-get update/upgrade; 依次安装一下依赖项: sudo apt-get install build-essential su ...
- jquery ajax事件
$.ajax({ type : 'POST', url : 'user.php', data : $('form').serialize(), success : function (response ...
- java异常处理机制throws
throws可以在方法声明时抛出的异常.原则上throws声明的异常,一定要在该方法中抛出,否则没有意义. 相反的,若方法中我们主动通过throw抛出一个异常,应该在throws中声明该种类异常,通知 ...
- SQLite打开提示database disk image is malformed
SQLite打开提示database disk image is malformed 网上说产生这种错误的原因有很多种,磁盘空间不足,还有就是写入数据过程中突然掉电等. 这种情况,如果数据还可以导出, ...