兩個很常用的類CArray,CList

2021-06-18 06:42:42 字數 1903 閱讀 3877

兩個很常用的類carray,clist

開始用過carray這個非常好用的類(如何使用看這篇文章

mfc陣列類carray的使用的操作詳解

)。後來又發現clist這個類與它有些相似,於是google了一下。在這裡彙總一些比較好理解的說法去熟悉他們。以便在以後的程式設計中應用自如:

title

array採用佇列方式儲存資料,因而其內部資料元素是以物理方式順序排列的,所以檢索、順序執行getat()等函式的速度是相當快的。但是由於每次佇列長度變化後,資料都要重新申請記憶體、拷貝記憶體、釋放記憶體,因而insert/add/removeat()的速度都很慢。如果你使用的資料元素尺寸相當大,而且陣列的操作相當複雜,頻繁使用insertat/setat/removeat等,應該考慮使用clist來代替。但是如果考慮array中儲存指標而不是資料本身,效率也可以接受。   

list採用鍊錶方式儲存資料,因而當鍊表資料有所變動時,只做了一下指向變動,所以即使資料元素非常多單個資料元素也很大,執行insert/add/remove的速度都很快,但是因為沒有統一的index,因而如果要找到某個元素只有遍歷整個鍊錶。整體上說,list的使用比較繁瑣,特別為小尺寸資料設計list更是得不償失的,這也是為什麼有cwordarray而沒有cwordlist的原因,因而在大多數情況下應該有限考慮是否可以使用array來儲存資料。     

使用什麼主要看你的使用要求了  

title

carray       carray   提供了規則陣列不具備的靈活性,但是程式可能不需要它。如果知道陣列的特定限制,反而可以使用全域性固定陣列。如果使用   carray,當需要重新分配時,使用   carray::setsize   建立它的大小並指定增長的元素數。否則,新增元素可能導致陣列經常重新分配和複製,這樣做效率很低而且可能產生記憶體碎片。還需注意的是,如果將一項插入陣列中,則   carray   移動記憶體中後面的項並且可能需要增長陣列。這些操作可能導致快取未命中和頁錯誤。如果瀏覽   mfc   使用的**,可能會明白可編寫一些更特定於方案的東西以提高效能。例如,由於   carray   是乙個模板,可以提供特定型別的   carray   專用化。   

clist       clist   是雙向鏈結表,因此頭、尾和表中已知位置   (position)   的元素插入速度很快。按值或者索引查詢需要順序搜尋,然而如果表很長則速度可能慢。如果**不要求雙向鏈結表,可能需要重新考慮使用   clist。使用單向鏈結表可省去更新所有操作的附加指標以及該指標的記憶體的系統開銷。這種附加記憶體不太好,但卻是解決快取未命中或頁錯誤的另一種可能的方法。

title

簡單陣列和列表的用法   

簡單的陣列類   carray   和列表類   clist   採用兩個引數:type   和   arg_type。這些類可以儲存任何在   type   引數中指定的資料型別:     

基本   c++   資料型別,如   int、char   和   float     

c++   結構和類     

定義的其他型別     

考慮到方便性和效率,可以使用   arg_type   引數來指定函式引數的型別。通常情況下,將   arg_type   指定為對   type   引數中命名型別的引用。例如:   

carraymyarray;   

clistmylist;   

第乙個示例宣告了乙個包含多個   int   的陣列集合   myarray。第二個示例宣告了乙個儲存   cperson   物件的列表集合   mylist。集合類的某些成員函式採用其型別由   arg_type   模板引數指定的引數。例如,carray   類的   add   成員函式採用   arg_type   引數:   

carraymyarray;   

cperson   person;   

myarray->add(   person   );  

兩個很實用的Python裝飾器詳解

目錄 這個函式的作用在於可以給任意可能會hang住的函式新增超時功能,這個功能在編寫外部api呼叫 網路爬蟲 資料庫查詢的時候特別有用 timeout裝飾器的 如下 import signal,functools 下面會用到的兩個庫 class timeouterror exception pass...

兩個類成員的模板

all right reserved.檔名稱 test.cpp 作 者 韓雙志 完成日期 2016年5月31日 版本號 v1.0 問題描述 試將此類宣告改為類模板宣告,使得資料成員data1和data2可以是任何型別。輸入描述 輸入兩種不同型別的資料 輸出描述 輸出兩個資料 include usin...

兩個成員的類模版

檔名稱 text.cpp 完成日期 2015年6月15日 版本號 v1.0 問題描述 1 試將此類宣告改為類模板宣告,使得資料成員data1和data2可以是任何型別。2 請為該類增預設建構函式 帶兩個引數分別對應兩個資料成員初值的建構函式,以及複製建構函式。輸入描述 無 程式輸出 宣告為類模板後的...