一、vector、list、deque 迭代器vector 原始指针list 随机迭代器deque 自定义迭代器,可以+n操作 迭代器失效vector 插入删除在插入删除点后的均会失效(不包括末尾;插入如果重新分配的话就会整体失效;清楚所有也会所有失效list 除了删除的点会失...
分类:
其他好文 时间:
2014-09-11 23:41:52
阅读次数:
207
RB-tree(红黑树)
1.1
简介
RB-tree属于二叉搜索树,即节点的键值一定大于其左孩子节点的键值,小于其右孩子节点的键值。RB-tree还有以下四个特征:
1、 每个节点非黑即红。
2、 根节点为黑色。
3、 如果节点为红,其子节点必须为黑。
4、 任一节点至NULL(即尾端)的任何路径,所含黑节点...
分类:
其他好文 时间:
2014-09-07 17:19:25
阅读次数:
280
Hashtable
2.1 简介
哈希表,又名散列表,可以提供“常数时间”的插入、删除、查询等操作。不同的元素通过hash function映射到不同的位置,但当不同元素获得经hash function获得相同的位置(索引)时,则发生“碰撞”,此时需要通过以下几种方法为新加入的元素寻找新的索引地址。
1、 线性探测法
由于为元素准备的为一块连续内存空间地址,该方法会循序...
分类:
其他好文 时间:
2014-09-06 22:35:54
阅读次数:
275
源码之前,了无秘密 ——侯杰第四章:序列式容器 C++语言本身提供了一个序列式容器array array:分配静态空间,一旦配置了就不能改变。 vector: 分配动态空间。维护一个连续线性空间,迭代器类型为:Random Access Iterato...
分类:
其他好文 时间:
2014-09-03 11:08:36
阅读次数:
231
今天在读《STL源码剖析》空间配置器第二级时看到了这句,有点不解,于是查阅后知:obj后面是个指针 STL_VOLATILE也应该是个类型定义的吧,程序中应该有define来对它定义。所以就是指针的指针。。指针,也就是地址,所以是__my_free_list是一个地址,*__my_free_list...
分类:
其他好文 时间:
2014-09-03 00:13:05
阅读次数:
420
源码之前,了无秘密。 --侯杰经典的书,确实每看一遍都能重新收获一遍:第一章:STL简介 STL的设计思维:对象的耦合性极低,复用性极高,符合开发封闭原则的程序库。 STL的价值:1.带给我们一套极具实用价值的零部件,以及一个整合的组织。 ...
分类:
其他好文 时间:
2014-09-02 22:41:15
阅读次数:
290
第二章:空间配置器 allocator SGI特殊的空间配置器,std::alloc SGI是以malloc()和free()完成内存的配置与释放。 SGI设计了双层级配置器: 第一级配置器直接使用malloc()和free(); _malloc_alloc_template ...
分类:
其他好文 时间:
2014-09-02 22:40:25
阅读次数:
237
第三章:迭代器概念与traits编程技法 迭代器是一种smart pointer auto_Ptr 是一个用来包装原生指针(native pointer)的对象,声明狼藉的内存泄漏问题可藉此获得解决。 auto_ptr用法如下,和原生指针一模一样:void func() { auto_p...
分类:
其他好文 时间:
2014-09-02 22:34:25
阅读次数:
266
一、容器vector
使用vector必须包含头文件:
#include
型别vector是一个定义于namespace std内的template:
[cpp]
view plaincopyprint?
templateclass _Ty, class _Ax = allocator >
第二个参数定义内存模型。我们一般采用默认的内存模型。
...
分类:
其他好文 时间:
2014-08-31 10:32:21
阅读次数:
239
一、deque的中控器
deque是连续空间(至少逻辑上看来如此),连续线性空间总令我们联想到array或vector。array无法成长,vector虽可成长,却只能向尾端成长,而且其所谓的成长原是个假象,事实上是(1)另觅更大空间;(2)将原数据复制过去;(3)释放原空间三部曲。如果不是vector每次配置新空间时都有留下一些余裕,其成长假象所带来的代价将是相当高昂。
...
分类:
其他好文 时间:
2014-08-27 23:35:56
阅读次数:
576