兩個很常用的類CArray,CList

來源:互聯網
上載者:User

開始用過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   參數中命名類型的引用。例如:  
  CArray<int,   int>   myArray;  
  CList<CPerson,   CPerson&>   myList;  
  第一個樣本聲明了一個包含多個   int   的數組集合   myArray。第二個樣本聲明了一個儲存   CPerson   對象的列表集合   myList。集合類的某些成員函數採用其類型由   ARG_TYPE   模板參數指定的參數。例如,CArray   類的   Add   成員函數採用   ARG_TYPE   參數:  
  CArray<CPerson,   CPerson&>   myArray;  
  CPerson   person;  
  myArray->Add(   person   );  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.