摘要: 阅读__adjust_heap源码前,我对于这个函数的一些最初实现想法:1、相关描述: **** Heap的底层实现是Vector类型 ****Heap里面存放的元素是从索引0开始存放,所以如果父结点为i,则其左子节点为(2 * i + 1)而右子节点为 (2 * i + 2) ****调用__adjust_heap函数的前提是:调用__adjust_heap之前 , 先对heap的最前端数据和最尾部数据进行交换2、the __adjust_heap interface **** template< class RandomAccessIterator, class Distance, 阅读全文
posted @ 2012-12-17 19:10 crazylhf 阅读(1288) 评论(2) 推荐(1) 编辑
摘要: 在list容器中,由于容器自身组织数据的特殊性,所以list提供了自己的排序函数list::sort, 并且实现得相当巧妙,不过《STL源码剖析》的原文中,我有些许疑问,对于该排序算法,侯认为是采用了快排,但是经过仔细分析,我认为是采用了归并来实现的。list::sort函数的实现位于stl_list.h文件,源码及注释如下:template <class T, class Alloc> void list<T, Alloc>::sort() { if (node->next == node || link_type(node->next)->next 阅读全文
posted @ 2012-12-17 18:25 crazylhf 阅读(293) 评论(0) 推荐(0) 编辑
摘要: 在SGI源码中,关于空间的destroy功能,分别实现了两个版本,其中一个是接受一个指针的版本,源码位于stl_construct.h中,接口及实现如下:template< class T > inline void destroy( T* pointer ) { pointer->~T( ); }另一个版本接受两个可双向移动的迭代器类型的参数,接口及实现如下:template< class ForwardIterator >inline void destroy( ForwardIterator first, ForwardIterator last ) { _ 阅读全文
posted @ 2012-12-17 13:35 crazylhf 阅读(306) 评论(0) 推荐(0) 编辑
摘要: 有关编译器组态设置,由于自己在阅读这一块代码时,老是有许多纠结,所以为了让自己记住一个关键点:有关编译器的组态设置,并非完全精确地针对某些特定编译器,具体移植时, 是需要做适当修改的。特此记录个人想法及思索过程。比如对于:#if defined( __sgi ) && !defined( __GNUC__ ) #if !defined( _BOOL ) define __STL_NEED_BOOL #endif #if !defined( _TYPENAME_IS_KEYWORD ) define __STL_NEED_TYPENAME #endif #ifdef _PARTI 阅读全文
posted @ 2012-12-17 13:15 crazylhf 阅读(688) 评论(0) 推荐(0) 编辑
摘要: C++设计新思维的第2章,涉及各种技术:编译期Assert,偏特化的使用,内部类的使用,Int2Type实现整型数到类型的映射,Type2Type实现类型到类型的映射,Select技术实现类型选择,编译期间侦测可转换性和继承性,Type Traits技术。 其中Int2Type用于需要在编译期间通过整型数来执行分派,此时可将整型数映射为类型,然后通过函数匹配规则,在多个重载函数中选出最佳匹配的函数。Type2Type则用于需要在编译期间通过类型来执行分派,而原有类型有过于庞大,此时可运用Type2Type将原有类型映射为占用空间较小的类型,再进行分派。其余技术书中大多讲得通俗易懂,不再赘述。. 阅读全文
posted @ 2012-10-02 16:25 crazylhf 阅读(357) 评论(0) 推荐(0) 编辑
摘要: Policy设计思路的来源: 软件设计,就是选择一种当前最优,而且在未来能得到很好扩展,便于维护的设计方案。通常都有多种可用的设计方案,而设计过程就是抉择的过程。 在软件设计中,常常会有这样的需求,对一个对象有大量的功能需求。此时常用的设计方案是:设计一个全功能型接口。然而,一个全功能型接口,将过于庞大,以至难以维护。好的设计应该是足够精巧的,而又清晰明了的。 故对于有大量功能需求的对象而言,全功能型接口不是好的选择。那么从另一个方向出发,则是将对象的功能分解,设计多个类来维护各种类型的接口,并尽量做到每个功能类的高内聚,功能类之间的低耦合。于是自然而然,产生这样的一种解法:多重继承。即对象实 阅读全文
posted @ 2012-10-02 15:29 crazylhf 阅读(727) 评论(0) 推荐(0) 编辑
摘要: 示例代码:(测试地址:http://codepad.org/9nz0yRRF ) 1 #include<vector> 2 #include<iostream> 3 #include<algorithm> 4 #include<stack> 5 6 using namespace std ; 7 8 /////////--------------------设计树的数据模型--------------------/////////// 9 /////////--- Start !!!! 10 11 template< class T > 阅读全文
posted @ 2012-10-02 12:29 crazylhf 阅读(322) 评论(0) 推荐(0) 编辑
摘要: 示例代码:( 测试地址 :http://codepad.org/6XDTlfcl ) 1 1 #include<vector> 2 2 #include<iostream> 3 3 #include<algorithm> 4 4 5 5 using namespace std ; 6 6 7 7 /////////--------------------设计树的数据模型--------------------/////////// 8 8 /////////---start 9 9 10 10 template< class T >... 阅读全文
posted @ 2012-10-02 12:26 crazylhf 阅读(414) 评论(0) 推荐(0) 编辑
摘要: 生成非重复随机数的两种编程思路:1、每次都在相同的范围内获取随机数,并将新生成的随机数与已生成的随机数逐一相比较,如果与已生成的随机数相同则重新获取随机数,若不同,则存储该随机数,继续获取下一个;2、每次获取随机数时,都将之前生成的随机数排除在外,以保证生成的随机数不重复。基于思路1,C++程序实现如下: 1 /******************************************************************** 2 * 3 * 文 件 名:Random.cpp 4 * 5 * 文件描述:生成不重复的随机数 6 * 7 * 创 建 人:... 阅读全文
posted @ 2012-05-17 19:51 crazylhf 阅读(545) 评论(0) 推荐(0) 编辑
摘要: 1 /********************************************************************** 2 * 3 * 文 件 名:InsertSort.cpp 4 * 5 * 文件描述:演示插入排序算法 6 * 7 * 创 建 人:crazyhf 2012年05月12日 8 * 9 * 版 本:1.0 10 * 11 * 修改记录: 12 * 13 *************************************************************... 阅读全文
posted @ 2012-05-12 23:46 crazylhf 阅读(190) 评论(0) 推荐(0) 编辑
摘要: 在数学上,如果数A与数B对M取模后得到的值相等,即A%M=B%M,则称A与B是关于模M同余,记为A≡B。此外对于同余运算有如下定理:(自己推导的话也可以轻易得证)(1)若A≡B,则存在常数D,使得A+D≡B+D ;(2)若A≡B,则存在常数D,使得A*D≡B*D ;(3)若A≡B,则存在常数n,使得A^n≡B^n ;基于此原理,对于模幂运算,即A^n%m的运算可以,通过A^n≡B^n(前提A≡B)的形式来化简,辅以定理(1)和(2),可以实现以较短的时间进行求解。程序如下: 1 /*=========================================== 2 * 3 * 函 .. 阅读全文
posted @ 2012-05-04 21:13 crazylhf 阅读(333) 评论(0) 推荐(0) 编辑
摘要: 在任何需要基类对象的地方都可以用公有派生类的对象来代替,这条规则称赋值兼容规则。它包括以下情况:派生类的对象可以赋值给基类的对象,这时是把派生类对象中从对应基类中继承来的成员赋值给基类对象。反过来不行,因为派生类的新成员无值可赋。可以将一个派生类的对象的地址赋给其基类的指针变量,但只能通过这个指针访问派生类中由基类继承来的成员,不能访问派生类中的新成员。同样也不能反过来做。派生类对象可以初始化基类的引用。引用是别名,但这个别名只能包含派生类对象中的由基类继承来的成员私有派生和保护派生不具备赋值兼容性 !示例代码: ( 代码测试:http://codepad.org/V8uaM2Al) 1 #i 阅读全文
posted @ 2012-03-08 16:11 crazylhf 阅读(655) 评论(0) 推荐(0) 编辑