VC裡的集合類 鍊錶類 對映類

2021-09-03 08:39:00 字數 1987 閱讀 5612

集合類是用來容納和處理一組物件或標準資料型別變數的c++類。每個集合類物件可以看作乙個單獨的物件。類成員函式可作用於集合的所有元素。mfc提供兩種型別的集合類:

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

這兩種集合類對使用者來說非常相似。基於模板的集合所包含的元素是使用者自定義的資料結構或者說是抽象的資料結構,它以陣列、鍊錶和對映表三種方式組織使用者自定義的資料結構。使用基於模板的集合類需要使用者作一些型別轉換工作。非基於模板的集合類提供的是一組現成的、用於某種預定義的資料型別(如cobject、word、byte、dword、字串等)的集合。在設計程式時,如果所用的資料型別是預定義的,如下面的編輯要用到的字串,則使用非基於模板的集合類;如果所用得資料型別是使用者自定義的資料結構型別,那就要用到基於模板的集合類。

根據物件在集合中的組織合儲存方式,集合類又可分為三種型別:鍊錶、陣列、對映(或字典)。應當根據特定的程式設計問題,選擇適當的型別。

鍊錶類用雙向鍊錶實現有序的、非索引的元素鍊錶。鍊錶有乙個頭或尾。很容易從頭或尾增加或刪除元素、遍歷所有元素,在中間插入或刪除元素。鍊錶在需要增加、刪除元素的場合效率很高。非基於模板的鍊錶有三種:coblist、cptrlist、cstringlist,分別用於管理物件指標、無型別指標和字串。可以使用鍊錶建立堆疊和佇列。

要訪問鍊錶的成員,可以使用getnext和getheadposition()。

要刪除鍊錶的成員,可以用getheadposition()和getnext()來遍歷鍊錶,然後用delete刪除其中的物件,最後呼叫removeall刪除鍊錶所包含的指標。

陣列類提供乙個可動態調整陣列大小的、有序的、按整數索引的物件陣列。

陣列在記憶體中連續的存放固定長度的陣列元素。陣列的最大優點是可以隨時訪問任一元素。陣列類包括基於模板的carray,它可以存放任何型別的資料;mfc還為位元組、字、雙字、cstring物件、cobject指標和無型別指標提供了預定義的類。陣列的元素可以通過乙個以零為基礎的整數下標直接進行訪問。下標操作符()可用於設定或檢取陣列元素。

如果要設定乙個超過陣列當前範圍的元素,可以指定該陣列是否自動增大。但是如果要調整陣列大小時,則陣列占用的記憶體塊需要重新移動,效率很低。如果不要求調整陣列大小,則對陣列集合的訪問和對標準c陣列的訪問一樣快。

在使用陣列之前,應使用setsize建立其大小,並分配記憶體。若不用setsize,象陣列新增元素時會導致頻繁的再分配記憶體和拷貝資料。

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

陣列通過getat(索引值)來訪問陣列中的成員。

要刪除陣列中的成員,可以用getsize()取得大小,然後遍歷陣列中成員,用delete刪除,然後呼叫removeall()清除其中的指標資料。

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

carraymyarray;

cmyclass myclass;

myarray->add(myclass);

對映類以一種字典的方式組織資料。每個元素由乙個關鍵字和乙個數值項組成,關鍵字用作數值項的識別符號,在集合中不允許重複,必須是唯一的。如果給出乙個關鍵字,對映類會很快找到對應的數值項。對映查詢是以雜湊表的方式進行的,因此在對映中查詢數值項的速度很快。除了對映類模板外,預定義的對映類能支援cstring物件、字、cobject指標和無型別指標。比如,cmapwordtoob類建立乙個對映表物件後,就可以用word型別的變數作為關鍵字來尋找對應的cobject指標。對映類最適用於需要根據關鍵字進行快速檢索的場合。

要訪問對映中的資料,可以用getstartposition()定位到開始處,再用getnextassoc訪問對映表中的成員。

要刪除對映中的資料,可以用getstartposition和getnextassoc遍歷並用delete刪除物件,然後呼叫removeall。

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

cmapmymap;

cperson person;

lpcstr lpstrname=「tom」;

mymap->setat(lpstrname,person);

有關集合類的使用可以參見mfc的例子collect。

鍊錶類操作

反轉鍊錶 node reverse list node head node p1 head node p2 head next node p null head next null while p2 return p1 在鍊錶指定位置插入節點 node insert list node head,i...

鍊錶類模板

include using namespace std class cnode 定義乙個節點類 template 定義類模板 class clist 定義clist類 type movetrail 獲取尾節點 return ptmp 返回尾節點 void addnode type pnode 新增節...

精通MFC程式設計(6) 陣列 鍊錶 對映類

為了處理資料的集合,mfc提供了一組集合類,包括陣列 鍊錶以及對映等,它們最大的作用是在應用框架中定義文件類的資料結構。一 模板類 模板集合類的引數用於定義儲存在集合中物件的型別。模板類 二 陣列類 陣列是一維的資料結構,在記憶體中,它以連續的位址儲存元素。這種儲存方式決定了使用者可以快速 隨機的訪...