STL源码剖析—侯捷
文章平均质量分 75
weishenmetlc
这个作者很懒,什么都没留下…
展开
-
Chapter 2:空间配置器 allocator
一:空间配置器的标准接口\quadSTL 规范规定了空间配置器 allocator 一定要有的一些接口,其中最重要的四个接口如下://配置空间,足以存储 n 个 T 对象; T* allocator::allocate(size_t n, const void* = 0)//归还先前配置的空间; void allocator::deallocate(T* p, size_t n)//在配置的指定空间原创 2017-01-03 19:35:49 · 413 阅读 · 0 评论 -
Chapter 4: 序列式容器之 heap and priority queue
一:heap1:heap 概述\quad1):binary max heap 表示的是用户可以以任何次序将任何元素推入容器内,但是每一次取出时取出的一定是优先权最高(也就是数值最高)的元素;同样的 binary min heap 表示的每一次取出的是优先权最低的元素;\quad2):binary heap 是一种 complete binary tree(完全二叉树),也就是说整棵 binary t原创 2017-01-12 10:20:04 · 306 阅读 · 0 评论 -
Chapter 5:关联式容器之 map 和 multimap
一:map1:map的特性是,所有元素都会根据元素的键值自动被排序。map 的所有元素都是 pair,同时拥有实值(value)和键值(key)。pair 的第一元素被视为键值,第二元素被视为实值。map 不允许两个元素拥有相同的键值。pair 的定义代码如下:template <class T1, class T2> struct pair { typedef T1 first_type原创 2017-01-16 23:00:00 · 285 阅读 · 0 评论 -
Chapter 5: 关联式容器之 set 和 multiset
一:set1:set 的特性是所有元素都会根据元素的键值自动排序,并且 set 的实值就是键值,键值就是实值,同时 set 不允许两个元素有相同的键值;2:由于 set 元素值就是键值,而键值关系到 set 元素的排列规则,如果任意改变 set 元素值,会严重破坏 set 组织的,所以我们不可以通过 set 的迭代器改变 set 的元素值;3:由于红黑树(RB-tree)是一种平衡二叉搜索树,自动排原创 2017-01-16 20:59:54 · 237 阅读 · 0 评论 -
Chapter 4: 序列式容器之 stack 和 queue
一:stack1:stack 概述\quadstack 是一种先进后出的数据结构,它只有一个出口。stack 允许新增元素,移除元素,取得最顶端元素,但除了最顶端外,没有任何其它方法可以存取 stack 的其它元素,换言之,stack 不允许有遍历行为,因此 stack 没有迭代器;\quad将元素推入 stack 的操作称为 push,将元素推出 stack 的操作称为 pop。2:stack 定原创 2017-01-11 21:14:17 · 305 阅读 · 0 评论 -
Chapter 4:序列式容器之 deque
1:deque 与 vector 的区别deque 与 vector 的最大差异在于以下两点: deque 允许于常数时间内对起头端进行元素的插入与删除操作; deque 的空间是动态地以分段连续空间组合而成,随时可以增加一段新的空间链接起来,因此 deque 没有所谓的容量(capacity)概念,而 vector 被分配的空间是一段连续空间 因此 像 vector 那样“因旧空间不足而重新配置一原创 2017-01-11 19:36:08 · 289 阅读 · 0 评论 -
Chapter 5: 关联式容器之 RB_tree
一:红黑树需要满足的性质红黑树(RB-tree)不仅是一个二叉搜书树(binary search tree),还必须要满足如下的性质: 每个节点不是红色就是黑色; 根节点为黑色; 如果节点为红,其子节点必须为黑; 任一节点至 NULL (树尾端)的任何路径,所含之黑节点数必须相同;为方便起见,我们将NULL视为黑。 二:RB-tree 的节点设计RB-tree 有红黑两色,并且拥有左右子节点。其节点原创 2017-01-15 14:23:43 · 329 阅读 · 0 评论 -
Chapter 4: 序列式容器之 list
1:相比于 vector 的连续线性空间,STL 中的 list 的构造要复杂许多,为双向链表形式。vector 插入或删除元素需要移动多个元素,所花时间为 O(n),然而在 list 中每次插入或删除一个元素,就配置或释放一个元素空间,不需要移动其它元素,所化时间为 O(1);2:list 的节点(node)因为 list 为双向链表形式,所以 list 的节点中包含两个指针,一个指向其上游节原创 2017-01-10 11:40:54 · 311 阅读 · 0 评论 -
Chapter 4: 序列式容器之 vector
1:vector 的数据安排以及操作方式与 array 非常相似,但空间运用的灵活性就有差别。Array 是静态空间,空间一旦配置了就不能改变;然而 vector 是动态空间,它的内部机制能够自行扩充空间以容纳新元素;2:vector 的迭代器\quadvector 维护的是一个连续线性空间,所以不论其元素型别如何,普通指针都可以作为 vector 的迭代器而满足所有必要条件,所以 vector 的原创 2017-01-08 21:44:21 · 341 阅读 · 0 评论 -
Chapter 3:迭代器概念以及 traits 编程技法
3.1:迭代器设计思维—STL关键所在1:STL中心思想在于:将数据容器(container)与算法(algorithms)分开彼此独立设计,然后用迭代器(iterator)将它们撮合在一起;容器和算法的泛型化可用class template和function template分别达成目标;2:算法find()这个例子展示了容器,算法和迭代器如何共同作用,该算法的源代码如下:template <cl原创 2016-12-26 03:42:07 · 482 阅读 · 0 评论 -
Chapter 5: 关联式容器之 hashtable
\quadSGI 中的 hashtable 使用的是开链法(separate chaining)。这种做法是在每一个表格元素中维护一个 list;hash function 为我们分配某一个 list,然后我们在那个 list 身上执行元素的插入,搜寻和删除等操作。虽然针对 list 而进行的搜寻只能是一种线性操作,但如果 list 够短,速度还是够快的。一:hashtable 的桶子(bucket原创 2017-01-19 20:41:49 · 273 阅读 · 0 评论