c++單向鏈表 (討論應不應該在默認的構造里就分配空間)



























































































































































































































































別人寫的:
































































































































































































































































































































posted on 2005-10-28 08:42 夢在天涯 閱讀(2454) 評論(6) 編輯 收藏 引用 所屬分類: CPlusPlus 、Data Arithmetic
{C++ 基礎} {C++ 高級} {C#界面,C++核心算法} {設計模式} {C#基礎}
posted on 2005-10-28 08:42 夢在天涯 閱讀(2454) 評論(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是最理想的。 回復 更多評論
只有注冊用戶登錄后才能發表評論。 | ||
【推薦】100%開源!大型工業跨平臺軟件C++源碼提供,建模,組態!
![]() |
||
相關文章:
|
||
網站導航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
|
||
|