《STL源码剖析》学习笔记
文章平均质量分 75
hpghy123456
这个作者很懒,什么都没留下…
展开
-
new/delete 的用法
在网上找了一些资料,了解了一下c++的内存分配机制。 注意,我们要区分几个容易混淆的关键词:new表达式、operator new、placement new 。 operator new 和 operator delete 函数是标准库函数。当使用 string * sp = new string("hello") ; 时,实际上发生三个步骤:原创 2010-04-22 23:55:00 · 725 阅读 · 0 评论 -
heap算法
// MyOwnHeap#include #include #include using namespace std ;// 维护堆,其中某个元素parent的值发生改变 templatevoid my_adjust_heap( RandomAccessIterator first, int parent, int length ) { typedef typename iterato原创 2010-05-03 20:12:00 · 978 阅读 · 0 评论 -
STL中的List排序问题
最近想钻研一下STL源代码,于是照着侯捷的《STL源码剖析》看SGI STL,今天想写写list的排序算法。源代码如下: template template void list::sort(_StrictWeakOrdering __comp){ // Do nothing if the list has length 0 or 1. if (_M_node->_M_ne原创 2010-04-29 23:58:00 · 2447 阅读 · 0 评论 -
红黑树
这几天在看红黑树,发现侯捷说得不清不楚,一气之下,回头看《算法导论》。这才把红黑树的插入操作思路弄清楚,心中有一种恍然大悟的感觉! 感觉还是《算法导论》牛逼呀!我也照着说说红黑树的插入操作吧。 红黑树是一棵满足一下规则的平衡二叉搜索树(平衡条件比AVL-tree弱,感到不可思议,因为我觉得rb-tree比AVL-tree复杂): 1. 每个节原创 2010-05-07 00:08:00 · 784 阅读 · 0 评论 -
红黑树二
红黑树是棵二叉搜索树,红黑树的删除操作首先要按照二叉搜索树的规则进行。如下:要删除节点 z(为5),实际上删除的是z的右子树的最小值y,再把y的值赋给z节点。示意图: 接着我们再考虑红黑树。 1. 删除的节点y 是红色,我们不处理,它还是一个红黑树。 2. y节点是黑色,且 x 节点是红色,只需要把 x 的颜色改为黑色就可原创 2010-05-11 23:16:00 · 647 阅读 · 0 评论 -
c++ template之trait技法总结
Trait技法的最初目的是为了管理模板参数,有的时候模板中需要几个参数,但是往往有些参数是与main parameters紧密相关的,这时候可以使用trait技巧,从几个主要的模板参数中推导出相应的secondary template argument,并以默认模板参数的形式出现在模板中。实际上使用的trait技巧实例往往会有效地提高程序的效率,下面我结合STL小小的说说trait的实际运用。原创 2012-03-19 21:20:54 · 9736 阅读 · 0 评论 -
表达式模板 expression templates 测试
表达式模板,在《c++ template》中是为了同时支持数组操作的优雅性和高效性,并说,metaprogramming主要适用与小的大小固定的数组,而expression templates适用于中性和大型数组的运行期操作。但实际上,经过我的测试,元编程和表达式模板不像书中说的那么神奇,或许,是我没有实现好。下面,我将测试expression templates。 如果要支持原创 2012-04-07 18:56:28 · 947 阅读 · 0 评论