
STL源码剖析
文章平均质量分 87
yuanhaitaozz
啊啊啊啊啊啊啊啊
展开
-
STL源码分析之vector容器
vector与array非常相似,两者唯一差别在于空间运用的灵活性 array是静态空间,一旦配置了就不能改变;若要改变使用的空间大小,一切琐碎由客户端自己来处理:先配置新空间,然后将元素从旧址一一搬到新址去,在退还原来的空间 vector则是动态空间,随着元素的加入,它的内部机制会自行扩充空间以容纳新的元素 以下为sgi vector源码:原创 2015-05-27 11:48:32 · 618 阅读 · 0 评论 -
STL源码分析之泛型算法由来
什么事质变算法: 是指在运算过程中会更改区间内(迭代器所指)的元素内容 例如copy, swap,replace, fill, remove, sort等等 什么是非质变算法: 例如find,search, count, max, min等等 算法的泛化过程 关于数组,当我们在其内寻找某个元素时,找到即返回;如果没有找到原创 2015-06-07 15:26:52 · 426 阅读 · 0 评论 -
STL源码分析之__type_traits
之前我们对iterator_traits有了一些了解,现在我们要了解__type_traits。 Iterator_traits负责萃取迭代器的特性,__type_traits则负责萃取型别的特性。 对于型别的特性,我们关注的点可能在于对该型别是否需要复杂处理。如果答案是否定的,我们在对这些型别进行构造、析构、拷贝赋值等操作时,就可以采取最有效率的措施,比如不使用析构函数,直接free等原创 2015-06-15 15:06:17 · 1538 阅读 · 0 评论 -
STL源码分析之copy算法
Copy ----- 深入强化效率 首先,先看看assignment operator(即 operator =) 和拷贝构造函数的区别 第一, 他们是不可能被同时调用的 其次,不管什么构造函数,它只可能在需要构造一个对象的时候被调用,比如: String s = s1; String s(s1); 这里调用的是拷贝构造函数,是构造新对象用的 而重载的operator=,完全可原创 2015-06-15 14:59:45 · 638 阅读 · 0 评论 -
STL源码分析之 sort算法
关于rotate算法 目的是将[first,middle)和[middle, last)间的元素互换,middle所指的元素会成为容器的第一个元素 比如{1, 2, 3,4, 5, 6}, 对元素3做rotate旋转操作,结果为{3, 4, 5, 6, 1, 2,} 首先要看一下关于reserve的算法: template void _原创 2015-06-13 14:46:51 · 544 阅读 · 0 评论 -
STL源码剖析之空间配置器
预备知识: 1、 类型ptrdiff_t有什么用? (http://bbs.youkuaiyun.com/topics/350142832) 两个指针之间的+ -运算后的结果就不再是一个指针了,而是一个“距离”概念,总要有一个类型与之对应吧,为了规范和一致性(可移植),C++定义了ptrdiff_t(就是long int类型)。 2、set_new_handler(ne原创 2015-05-25 10:33:19 · 517 阅读 · 0 评论 -
STL源码分析之power算法
关于算法power 一般我们遇到要实现power算法,最直接就是如下实现: Int power(int x, unsigned int n) { Intresult = 1; While(n--) result *= x; return result; } 然而,这样计算的复杂度为O(n) 想要改进,因为 x^n = x^(n/2)原创 2015-06-07 15:32:21 · 1541 阅读 · 0 评论 -
STL源码分析之大顶堆
关于大顶堆和小顶堆这里就不再介绍了,这里通过STL再次回顾一下。 heap为了适应容器大小的不断变化,底层调用vector实现 关于heap的算法(这里是大顶堆) push_heap()算法 为了满足完全二叉树的条件,新加入的元素一定是放在最下一层作为叶节点,并填补在由左至右的第一个空格,即插在vector的end()处 我们通过上溯,将新节点与其父节点原创 2015-06-07 14:56:42 · 996 阅读 · 0 评论 -
STL源码分析之hashtable
二叉搜索树具有对数平均时间的表现,但这样的表现构造在一个假设上:输入数据有足够的随机性 这里我们要介绍的是散列表数据结构,这种结构在插入、删除、搜寻等操作上具有“常数平均时间”的表现,而且这种表现是以统计为基础,不需要仰赖输入元素的随机性 Hash table提供对任何有名项的存取操作和删除操作。由于操作对象是有名项,所有hashtable可被视为一种字典结构。 hashtabl原创 2015-06-07 15:15:13 · 640 阅读 · 0 评论 -
STL源码分析之RB-tree结构简析
所谓关联容器: 每笔数据(每个元素)都有一个键值(key)和一个实值(value)。当元素被插入到关联式容器中时,容器内部结构(可能是RB-Tree 也可能是hash-table)便依照其键值大小,以某种特定规则将这个元素置放于适当的位置。 关联容器没有所谓的头尾(只有最大元素和最小元素),所以不会有所谓的push_back(), push_front(),原创 2015-06-07 14:58:54 · 722 阅读 · 0 评论 -
STL源码剖析之list
相较于vector的连续线性空间,list就显得复杂的多,它的好处是每次插入或删除一个元素,就配置或释放一个元素空间。 因此,list对于空间的运用有绝对的精准,一点不浪费,且对于任何位置的元素插入或者删除,list永远是常数时间。 与之前接触的一样,list本身和list节点结构是分开设计的。 List节点结构如下: template struct __list_node {原创 2015-05-29 10:40:24 · 451 阅读 · 0 评论 -
STL源码分析之literator和triats编程技法
Traits编程技法: 1、 关于模板的参数推导 此例中以func为对外接口,却把实际操作全部放在func_impl中,由于func_impl是一个function template,一旦被调用,编译器会自动进行template参数推导,于是导出型别T,顺利解决问题 迭代器所指对象的型别,称为该迭代器的 value type .上述的参数型别推导虽可用,但不是全面原创 2015-06-14 21:28:24 · 998 阅读 · 0 评论