{C++ 基础} {C++ 高级} {C#界面,C++核心算法} {设计模式} {C#基础}
posted on 2005-10-28 08:42 梦在天涯 阅读(2443) 评论(6) 编辑 收藏 引用 所属分类: CPlusPlus 、Data Arithmetic
应该要有拷贝构造函数哦,否则在进行 CIntLink link2(link); 这样的操作时只会复制头结点的指针,而不是重新初始化一个链表哦 回复 更多评论
楼上说的还可以,如果为了使程序更加我完善,有健壮性,我还是喜欢用template<class T> 的方式来创建一个连表, 回复 更多评论
楼上的楼上说的拷贝构造函数是不是每个节点都的重新new,啊? 回复 更多评论
请问采用template<class T>的方式有什么好处呢? 回复 更多评论
好处当然是不言自明咯,算法严谨,安全,可重用性高…… 回复 更多评论
构造拷贝应该进行值拷贝。仅仅拷贝外部变量指针,在C++中极易造成内存泄漏,构成安全隐患。 除非你的程序对性能要求极高,或者你的链表长度极长(一般>100000项,相对于现在的计算机内存操作性能,才应算做极长,当然,实际情况也要综合考虑链表每一项的长度。),并且你保证外部变量在此类所生成的实例的生存周期内一直有效,那么仅仅传递指针是可以的。 不过这样一来,你DEBUG的时间会高出N倍,而且极易留下后患。尤其在对安全性和稳定性较高的领域,宁可牺牲些许性能,也要尽量保证安全。 顺便多句嘴,链表如果>100000项,尽量考虑RedBlackTree或者Map/HashMap,这样查找的性能比链表高的多得多得多得多得多,而插入最末项的性能也并会不比链表慢。尤其如果链表需要进行按顺序插入合适的位置,那么那个速度- -!我想你看到了,会以为死机了。 单项链表,N项,查找其中一个值最大时间O(N)。而对于红黑树或MAP,最大时间仅需O(log2(N))次操作,HASHMAP的查找时间恒定,只和HASH函数的速度相关。一般来说,对于极大数据结构操作HASHMAP是最理想的。 回复 更多评论