2011年12月12日
摘要: 看《effective c++》,作者一直强调用std::tr1::shared_ptr,比起auto_ptr好多了。shared_ptr采用引用计数,多个指针可以指向同一个对象;auto_ptr就不能,只能运行一个指针指向一个对象:如果要指针赋值,那么原来的指针要放弃对该对象的所有权。恩,以后都用shared_ptr。shared_ptr在最新的c++11中,已经被列入了标准指针,而auto_ptr则出局了。说了那么多,shared_ptr采用RAII技术,是防止内存泄露的神器。按bnu_chenshuo的说法,他最后一次看见代码中的内存泄露还是04年他做实习生的时候。而C++沉思录的作者A 阅读全文
posted @ 2011-12-12 14:49 Kadin Zhu 阅读(2228) 评论(0) 推荐(0) 编辑
  2011年12月5日
摘要: 在 Vim 中可以很方便的根据不同的文件类型来设置使用 tab 制表符或者空格,还可以设置长度,非常灵活。首先来看如何设定 tab 的宽度以及如何确定用 tab 制表符还是空格来表示一个缩进: settabstop=4 setsofttabstop=4 setshiftwidth=4 setnoexpandtab/expandtab其中tabstop表示一个 tab 显示出来是多少个空格的长度,默认 8。softtabstop表示在编辑模式的时候按退格键的时候退回缩进的长度,当使用expandtab时特别有用。shiftwidth表示每一级缩进的长度,一般设置成跟softtabstop... 阅读全文
posted @ 2011-12-05 12:02 Kadin Zhu 阅读(4784) 评论(0) 推荐(0) 编辑
  2011年11月19日
摘要: 在openSUSE11.1中安装vmware-tools后,发现在/mnt下没有hgfs,无法查看与windows共享的文件。解决的方法是需要手动加载hgfs,方法如下。1.SuSE:~ #vmware-hgfsclient 命令查看当前有哪些共享的目录2. 看到了自己要共享的目录之后,就可以使用 SuSE:~ #mount-t vmhgfs .host:/Documents /mnt/hgfs#使用mount方式挂载,其中.host:/Documents是共享名,/mnt/hgfs是挂载点 SuSE:~ #mount.vmhgfs.host:/Documents /mnt/hgfs #另一种 阅读全文
posted @ 2011-11-19 16:21 Kadin Zhu 阅读(3773) 评论(0) 推荐(1) 编辑
  2011年7月14日
摘要: 克隆就是复制一个对象的复本.但一个对象中可能有基本数据类型,如:int,long,float 等,也同时含有非基本数据类型如(数组,集合等)被克隆得到的对象基本类型的值修改了,原对象的值不会改变.这种适合shadow clone(浅克隆).但如果你要改变一个非基本类型的值时,原对象的值却改变了,.比如一个数组,内存中只copy他的地址,而这个地址指向的值并没有copy,当clone时,两个地址指向了一个值,这样一旦这个值改变了,原来的值当然也变了,因为他们共用一个值.,这就必须得用深克隆(deep clone)以下举个例子,说明以上情况:被克隆类:ShadowClone.javaclassSh 阅读全文
posted @ 2011-07-14 13:23 Kadin Zhu 阅读(1292) 评论(1) 推荐(0) 编辑
  2011年7月5日
摘要: More Effective C++中有对指针和引用在使用上的区别的介绍:指针与引用看上去完全不同(指针用操作符’*’和’->’,引用使用操作符’.’),但是它们似乎有相同的功能。指针与引用都是让你间接引用其他对象。你如何决定在什么时候使用指针,在什么时候使用引用呢? 首先,要认识到在任何情况下都不能用指向空值的引用。一个引用必须总是指向某些对象。因此如果你使用一个变量并让它指向一个对象,但是该变量在某些时候也可能不指向任何对象,这时你应该把变量声明为指针,因为这样你可以赋空值给该变量。相反,如果变量肯定指向一个对象,例如你的设计不允许变量为空,这时你就可以把变量声明为引用。 “但是,请 阅读全文
posted @ 2011-07-05 21:50 Kadin Zhu 阅读(225) 评论(0) 推荐(0) 编辑
摘要: 判断链表是否有环,目前有两种主流的方法,一种是设置两个指针,一个步进量是1,另一个步进量是2,如果存在环,则步进量为2的指针一定能追赶上步进为1的指针,即在某一时刻它们的地址相同,代码如下:bool check(const node* head) { if(head==NULL) return false; node *low=head, *fast=head->next; while(fast!=NULL && fast->next!=NULL) { low=low->next; fast=fast->next->next; if(low==fa 阅读全文
posted @ 2011-07-05 10:37 Kadin Zhu 阅读(332) 评论(0) 推荐(0) 编辑
  2011年6月21日
摘要: 在一些规模稍大的应用中,Java虚拟机(JVM)的内存设置尤为重要,想在项目中取得好的效率,GC(垃圾回收)的设置是第一步。PermGen space:全称是Permanent Generation space.就是说是永久保存的区域,用于存放Class和Meta信息,Class在被Load的时候被放入该区域Heap space:存放Instance。GC(Garbage Collection)应该不会对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误Java Heap分为3个区1.Young2.Old3.Perma 阅读全文
posted @ 2011-06-21 12:36 Kadin Zhu 阅读(978) 评论(0) 推荐(0) 编辑
  2011年6月1日
摘要: 1. 红黑树简介2. 红黑树性质介绍3. 漫游红黑树4. 我的EasyCoding库5. 参考资料及代码下载<1>. 红黑树简介红黑树是一种平衡的二叉查找树,是一种计算机科学中常用的数据结构,最典型的应用是实现数据的关联,例如map等数据结构的实现。1972年,鲁道夫贝尔最先发明,但是他称之为“对称二叉B树”,真正的称之为“红黑树”是在1978年Leo J. Guibas 和 Robert Sedgewick的一篇论文开始的。这么算起来,红黑树已经存在了将近30年,时至今日,仍旧另初学者头痛不已。<2>. 性质简介红黑树拓展了二叉查找树,给每个树的节点增加了一个Colo 阅读全文
posted @ 2011-06-01 18:19 Kadin Zhu 阅读(465) 评论(0) 推荐(0) 编辑
  2011年5月30日
摘要: 如题:给出N个整数(N可能很大,以致无法装入内存),找出前K个最大的整数【解法一】当学生们信笔写下 float array [10000000],他们往往没有想到这个数据结构要如何在电脑上实现,是从当前程序的栈(Stack)中分配,还是堆(Heap),还是电脑的内存也许放不下这么大的东西?我们先假设元素的数量不大,例如在几千个左右,在这种情况下,那我们就排序一下吧。在这里,快速排序或堆排序都是不错的选择,他们的平均时间复杂度都是 O(N * log2N)。然后取出前 K 个,O(K)。总时间复杂度 O(N * log2N)+ O(K) = O(N * log2N)。你一定注意到了,当 K=1 阅读全文
posted @ 2011-05-30 19:08 Kadin Zhu 阅读(3450) 评论(0) 推荐(1) 编辑
  2011年5月28日
摘要: shell的结构分为三大类:顺序结构、分支结构和循环结构1. if语句语法格式:if <语句序列A>then<语句序列B>fi如果语句序列A中的最后一个命令的返回值为0,则执行语句序列B中的命令,然后继续执行fi以后的命令;如果语句序列A中的最后一个命令的返回值为非0,则跳转到fi并且继续执行fi以后的命令,注意,在这里A执行结果为0认为是真。if test –f funfilethen echo funfile existsfiif [ -f funfile ]; then echo funfile exists echo hellofi2. if-else语句语法格 阅读全文
posted @ 2011-05-28 21:59 Kadin Zhu 阅读(310) 评论(0) 推荐(0) 编辑