这篇文章参考的是侯捷的《STL源码剖析》,所以主要介绍的是SGI STL实现版本,这个版本也是g++自带的版本,另外有J.Plauger实现版本对应的是cl自带的版本,他们都是基于HP实现的版本,有兴趣可以翻翻最新的源码头文件开始处有声明。 /* * * Copyright (c) 1994 * H...
分类:
其他好文 时间:
2014-08-10 18:12:50
阅读次数:
240
本文主要分析gcc4.8版本的stl list的源码实现,与vector的线性空间结构不同,list的节点是任意分散的,节点之间通过指针连接,好处是在任何位置插入删除元素都只需要常数时间,缺点是不能随机访问,查询复杂度是O(n),n为list中的元素个数。所以list非常适合应用与数据插入删除频繁的...
分类:
其他好文 时间:
2014-08-07 00:27:17
阅读次数:
358
上篇简单介绍了gcc4.8提供的几种allocator的实现方法和作用,这是所有stl组件的基础,容器必须通过allocator申请分配内存和释放内存,至于底层是直接分配释放内存还是使用内存池等方法就不是组件需要考虑的事情。这篇文章开始分析gcc4.8 stl的容器源码实现。stl的容器分为序列式容...
分类:
其他好文 时间:
2014-08-03 17:33:55
阅读次数:
270
stl中内存配置器分为两级:第一级配置对象超过128B的内存,第二级配置对象小于128B的内存,stl默认采用第二级内存配置器,因为如果对象大于128B,则第二级内存配置器会自动调用第一级内存配置器。
重新整理了《STL源码剖析》上的代码注释,如下:
#include
#include
#include
#include
#include
#include
#include
#inclu...
分类:
其他好文 时间:
2014-08-02 01:53:42
阅读次数:
269
网上一位大神的经验之谈【语言经典书】C:C程序设计语言(K&R)C和指针C专家编程C陷阱与缺陷你必须知道的495个C语言问题C++: C++ primer effective C++深度探索C++对象模型stl源码分析C++必知必会java:java编程思想java并发编程深入理解Java虚拟机:J...
分类:
其他好文 时间:
2014-07-30 20:25:24
阅读次数:
199
一、vector的特性vector其中一个特点:内存空间只会增长,不会减小,援引C++ Primer:为了支持快速的随机访问,vector容器的元素以连续方式存放,每一个元素都紧挨着前一个元素存储。设想一下,当vector添加一个元素时,为了满足连续存放这个特性,都需要重新分配空间、拷贝元素、撤销旧...
分类:
其他好文 时间:
2014-07-23 15:14:06
阅读次数:
221
hashtable
---------------------------------------------------------------------------
二叉搜索树具有对数平均时间的表现,它建立在输入数据有足够的随机性的假设
hashtable 有常数平均时间的表现,基于统计,不需依赖输入元素的随机性
hashtalbe 的简单实现:
所有元素都 16-bits 不带正负号的整数,范围 0~65535,配置一个 array,索引号码为 0~65535,初值全部为 0 。
每一个元素...
分类:
其他好文 时间:
2014-07-23 13:23:47
阅读次数:
379
set相关算法
------------------------------------------------------------------------------------
描述:
set_union , set_difference , set_intersection , set_symmetric_difference 算法接受的 set ,
必须是有序区间,适用于以 RB-tree 为底层的 set/multiset , 不适用于以 hash 为底层的 hash_set/hash_mul...
分类:
其他好文 时间:
2014-07-22 22:34:33
阅读次数:
214
RB-tree(红黑树)
--------------------------------------------------------------------------
平衡二叉搜索树 --> 平衡可提高搜索效率
常见的平衡二叉搜索树有:
AVL-tree(任何节点的左右子树高度相差最多 1)、红黑树、AA-tree
AVL-tree
破坏平衡的情况及恢复平衡的方法
恢复时要先找到失去平衡的点
外侧插入 --> 单旋转
内侧插入 --> 双旋转
图5-10
图5-11
图5-12
红黑树是...
分类:
其他好文 时间:
2014-07-22 22:34:33
阅读次数:
316
set
------------------------------------------------------------------------
所有元素都会根据元素的键值自动被排序。
不可以通过 set 的迭代器改变 set 的元素值。因为 set 元素值就是其键值,关系到 set 元素的排列规则。
set::iterator 被定义为底层 RB-tree 的 const_iterator,杜绝写入操作
标准的 STL set 以 RB-tree 为底层机制,就像 stack 以 dequ...
分类:
其他好文 时间:
2014-07-22 22:34:33
阅读次数:
231