1.hashtable
二叉搜索树具有对数平均时间的表现,但这样的表现构造在一个假设上:输入数据有足够的随机性。而hashtable在插入、删除、搜寻等操作上也具有“常数平均时间的表现”,而且这种表现是以统计为基础的,不依赖于输入的随机性。
一个简单的hashtable的例子:
如果元素是32bits而不是16bits,我们要准备的array就必须是4GB的...
分类:
其他好文 时间:
2015-03-13 16:33:36
阅读次数:
211
1.AVL树
AVL tree是指任何节点的左右子树高度相差最多1的二叉搜索树。任何节点左右子树高度最多相差1能够保证AVL树具有“对数深度”的平衡状态。在对AVL tree进行插入操作时,可能造成树平衡被破坏。根据新结点插入位置的不同,可以将平衡的破坏分成四种情况:左左,左右,右左,右右。其中左左和右右被称为外侧插入,可以采用单旋转操作调制解决。而左右和右左则称为内侧插入,可以采用双...
分类:
其他好文 时间:
2015-03-13 10:58:13
阅读次数:
231
转自:深入剖析 linux GCC 4.4 的 STL string本文通过研究STL源码来剖析C++中标准模板块库std::string运行机理,重点研究了其中的引用计数和Copy-On-Write技术。平台:x86_64-redhat-linuxgcc version 4.4.6 2011073...
分类:
系统相关 时间:
2015-03-10 15:23:19
阅读次数:
173
1.heap
heap不属于STL容器组件,它是priority queue的底层实现机制。
(1)push_heap算法
向堆中加入元素,首先将要加入的元素放到堆所在数组的末端,然后再对这个元素进行上溯操作,直到新堆合法为止。如下图所示:
(2)pop_heap算法
pop_heap操作取走堆中的最大(小)值。根据堆的特性,堆的最大(小)值必定是堆所存...
分类:
其他好文 时间:
2015-03-06 16:35:21
阅读次数:
165
1.deque
deque和vector的最大差异在于deque允许在常数时间内对首端进行元素的插入和删除操作。而且deque没有容量的观念,因为它是动态地以分段连续空间组合而成的,随时可以增加一段新的空间并链接起来。像vector那样因旧空间不足而重新配置一块更大空间的情况在deque里是不会发生的。虽然deque也提供Random Access Iterator,但它的迭代器并不是...
分类:
其他好文 时间:
2015-03-06 12:48:22
阅读次数:
140
1.vector
vector的数据安排以及操作方式与array非常相似,两者的唯一差别在于空间的运用的灵活性。array是静态空间,一旦配置了就不能再改变。vector是动态空间,随着元素的加入它的内部机制会自行扩充空间以容纳新元素。
(1)vector的迭代器
因为vector维护的是一个连续线性空间,所以无论其元素型别为何,普通指针都可以作为vector的迭代器。因...
分类:
其他好文 时间:
2015-03-05 16:58:12
阅读次数:
106
过年在家无事看了《STL源码剖析》,开学了将看过的东西总结一下,以防忘记。 先从STL的内存管理开始总结。掌管STL内存控制的是一个叫空间适配器(alloc)的东西。STL有两个空间适配器,SGI标准空间适配器(allocate)和SGI特殊的空间适配器(alloc),前者只是对c++的new...
分类:
其他好文 时间:
2015-03-04 06:11:50
阅读次数:
154
最近在看《STL源码剖析》,到了将iterator_traits的这一节(3.4)。实现它的代码倒是看得懂,但是对它的使用场景却是有点摸不着头脑。
让我先贴一段代码,然后我们再慢慢看。
#include
#include
using namespace std;
//第一种方式
template
struct iter_traits
{
typedef typename I...
分类:
其他好文 时间:
2015-03-03 23:44:48
阅读次数:
370
http://www.cnblogs.com/cobbliu/archive/2012/05/21/2512249.htmlPS:lower_bound of value 就是最后一个 value的位置lower_bound的意思是一段相等的序列的头(闭)和尾(开)的位置STL中关于二分查找的函数....
分类:
编程语言 时间:
2015-02-15 15:06:42
阅读次数:
230
1.具有sub-allocation的SGI内存配置器
内存配置器allocator是stl中的一个模板类,它提供类型化的内存分配以及释放操作。SGI STL的配置器与众不同,其名称是alloc而非allocator,而且不接受任何参数(如vector)。每个SGI STL容器采用的默认内存配置其都是alloc而不是allocator。
首先介绍a...
分类:
其他好文 时间:
2015-02-03 23:00:02
阅读次数:
260