http://www.cppblog.com/API/archive/2011/12/11/161926.html*-----------------------------------------------------------RB-Tree的插入和删除操作的实现算法红黑树的几个性质:1)每个结点只有红和黑两种颜色2)根结点是黑色的3)空节点是黑色的(红黑树中,根节点的parent以及所有叶节点lchild、rchild都不指向NULL,而是指向一个定义好的空节点)。4)如果一个结点是红色的,那么它的左右两个子结点的颜色是黑色的5)对于每个结点而言,从这个结点到叶子结点的任何路径上的黑色 Read More
http://www.cppblog.com/API/archive/2013/08/19/202633.html几天前,在CSDN论坛看到这么一则讨论:在宏定义中怎么使用可变参数?(http://expert.csdn.net/Expert/topic/2925/2925165.xml)。楼主希望能定义这样的macro:#define fun1(a, b, ...) fun2(__FILE__, __LINE__, a, b, ...)我猜楼主是想写trace,如果不能使用可变参数的macro,那么就得像MFC那样写一堆TRACE macros:// 取自 MFC 7.1 的 afx.h// Read More
http://www.cnblogs.com/ccdev/archive/2012/09/06/2673560.htmlC++堆上申请二维数组假设要申请的是double型大小m*n数组有如下方法方法一:优点:申请的空间是连续的缺点:较难理解1double(*d)[n]=newdouble[m][n]方法二:优点:容易理解缺点:申请的空间不能连续且需要多个指针才能管理double*d[m];for(inti=0;i<m;i++)d[i]=newdouble[n]; Read More
http://www.cnblogs.com/ccdev/archive/2012/09/06/2673618.html算法描述:1、先判断是否有环设置两个指针(fast,slow),初始值都指向头,slow每次前进一步,fast每次前进二步,如果链表存在环,则fast必定先进入环,而slow后进入环,两个指针必定相遇。(当然,fast先行头到尾部为NULL,则为无环链表)1boolisExitsLoop(list*head)2{3list*slow=head,*fast=head;45while(fast&&fast->next)6{7slow=slow->nex Read More
http://www.cnblogs.com/ccdev/archive/2012/09/08/2676485.html通过迭代(非递归)及递归将单链表逆序老生常谈的问题了,不过很多地方面试还是很喜欢问这个问题。实际工程中感觉用处不大,需要逆序的存储为什么要选择单链表呢?为什么不用list(inc++)或iterator(inanylanguage)?或者将数据全部推入栈中再依次弹出。说了这么多有点无聊了,参看酷壳的《我为什么反对纯算法面试》。迭代(非递归)算法描述:设置两个临时指针prev和next分别标记当前结点的前驱和后继,将当前结点的next指针指向前驱,然后把前驱指针替换为当前结点, Read More
http://www.cnblogs.com/ccdev/archive/2012/12/19/2825355.html废话不多说,常用的代码积淀下来。一、懒汉模式:即第一次调用该类实例的时候才产生一个新的该类实例,并在以后仅返回此实例。需要用锁,来保证其线程安全性:原因:多个线程可能进入判断是否已经存在实例的if语句,从而non thread safety.使用double-check来保证thread safety.但是如果处理大量数据时,该锁才成为严重的性能瓶颈。1、静态成员实例的懒汉模式: 1 class Singleton 2 { 3 private: 4 static... Read More