日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

VC里的集合类、链表类、映射类

發布時間:2025/3/21 c/c++ 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VC里的集合类、链表类、映射类 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

集合類是用來容納和處理一組對象或標準數據類型變量的C++類。每個集合類對象可以看作一個單獨的對象。類成員函數可作用于集合的所有元素。MFC提供兩種類型的集合類:

基于模板的集合類、非基于模板的集合類。

這兩種集合類對用戶來說非常相似?;谀0宓募纤脑厥怯脩糇远x的數據結構或者說是抽象的數據結構,它以數組、鏈表和映射表三種方式組織用戶自定義的數據結構。使用基于模板的集合類需要用戶作一些類型轉換工作。非基于模板的集合類提供的是一組現成的、用于某種預定義的數據類型(如CObject、WORD、BYTE、DWORD、字符串等)的集合。在設計程序時,如果所用的數據類型是預定義的,如下面的編輯要用到的字符串,則使用非基于模板的集合類;如果所用得數據類型是用戶自定義的數據結構類型,那就要用到基于模板的集合類。

根據對象在集合中的組織合存儲方式,集合類又可分為三種類型:鏈表、數組、映射(或字典)。應當根據特定的編程問題,選擇適當的類型。

鏈表

鏈表類用雙向鏈表實現有序的、非索引的元素鏈表。鏈表有一個頭或尾。很容易從頭或尾增加或刪除元素、遍歷所有元素,在中間插入或刪除元素。鏈表在需要增加、刪除元素的場合效率很高。非基于模板的鏈表有三種:CObList、CPtrList、CStringList,分別用于管理對象指針、無類型指針和字符串??梢允褂面湵韯摻ǘ褩:完犃小?/p>

要訪問鏈表的成員,可以使用GetNext和GetHeadPosition()。

要刪除鏈表的成員,可以用GetHeadPosition()和GetNext()來遍歷鏈表,然后用delete刪除其中的對象,最后調用RemoveAll刪除鏈表所包含的指針。

數組

數組類提供一個可動態調整數組大小的、有序的、按整數索引的對象數組。

數組在內存中連續的存放固定長度的數組元素。數組的最大優點是可以隨時存取任一元素。數組類包括基于模板的CArray,它可以存放任何類型的數據;MFC還為字節、字、雙字、CString對象、CObject指針和無類型指針提供了預定義的類。數組的元素可以通過一個以零為基礎的整數下標直接進行訪問。下標操作符([])可用于設置或檢取數組元素。

如果要設置一個超過數組當前范圍的元素,可以指定該數組是否自動增大。但是如果要調整數組大小時,則數組占用的內存塊需要重新移動,效率很低。如果不要求調整數組大小,則對數組集合的訪問和對標準C數組的訪問一樣快。

在使用數組之前,應使用SetSize建立其大小,并分配內存。若不用SetSize,象數組添加元素時會導致頻繁的再分配內存和拷貝數據。

數組類適用于那些需要快速檢索、很少需要增加或刪除元素的集合。

數組通過GetAt(索引值)來訪問數組中的成員。

要刪除數組中的成員,可以用GetSize()取得大小,然后遍歷數組中成員,用delete刪除,然后調用RemoveAll()清除其中的指針數據。

下面是使用數組模板類的例子:

CArray<CMyClass,CMyClass&> myArray;

CMyClass myClass;

myArray->Add(myClass);

映射

映射類以一種字典的方式組織數據。每個元素由一個關鍵字和一個數值項組成,關鍵字用作數值項的標識符,在集合中不允許重復,必須是唯一的。如果給出一個關鍵字,映射類會很快找到對應的數值項。映射查找是以哈希表的方式進行的,因此在映射中查找數值項的速度很快。除了映射類模板外,預定義的映射類能支持CString對象、字、CObject指針和無類型指針。比如,CMapWordToOb類創建一個映射表對象后,就可以用WORD類型的變量作為關鍵字來尋找對應的CObject指針。映射類最適用于需要根據關鍵字進行快速檢索的場合。

要訪問映射中的數據,可以用GetStartPosition()定位到開始處,再用GetNextAssoc訪問映射表中的成員。

要刪除映射中的數據,可以用GetStartPosition和GetNextAssoc遍歷并用delete刪除對象,然后調用RemoveAll。

下面是使用CMap模板類的例子:

CMap<CString,LPCSTR,CPerson,CPerson&> myMap;

CPerson person;

LPCSTR lpstrName=“Tom”;

myMap->SetAt(lpstrName,person);

有關集合類的使用可以參見MFC的例子COLLECT。

總結

以上是生活随笔為你收集整理的VC里的集合类、链表类、映射类的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。