使用MFC的陣列類

2021-04-20 19:55:56 字數 2333 閱讀 4697

mfc的陣列類支援的陣列類似於c++中的常規陣列,可以存放任何資料型別。c++的常規陣列在使用前必須將其定義成能夠容納所有可能需要的元素,而mfc陣列類建立的物件可以根據需要動態地增大或減小,陣列的起始下標是0,而上限可以是固定的,也可以隨著元素的增加而增加,陣列在記憶體中的位址仍然是連續分配的。

mfc定義了陣列模板類carray,並針對各種常用變數型別定義了cbytearray,cwordarray,cuintarray,cdwordarray,cstringarray,cobarray,cptrarray。詳見下表:

陣列類變數型別變數數值範圍標頭檔案

carray

通過模板類的引數型別設定各種型別

afxtempl.h

cbytearray

8位無符號整數 byte型別

0—255

afxcoll.h

cwordarray

16位無符號整數 word型別

0—65535

afxcoll.h

cdwordarray

32位無符號整數 dword型別

0—4294967295

afxcoll.h

cuintarray

32位無符號整數 uint型別

0—4294967295

afxcoll.h

cstringarray

cstring字串 string字串

afxcoll.h

cobarray

cobject類及其派生類

afxcoll.h

cptrarray

void* 型別指標

afxcoll.h

mfc陣列類使用方法基本相同,下面分別以carray和cuintarray為例演示說明陣列類的使用方法。

使用 carray

開啟vc++ 6.0,建立基於對話方塊的工程array。carraydlg類宣告檔案(arraydlg.h)中新增語句:

#include
請記住:使用carray一定要包含標頭檔案afxtempl.h。

開啟主對話方塊資源idd_array_dialog,新增乙個按鈕idc_array_cpoint,標題為carray_cpoint,雙擊該按鈕,在onarraycpoint()函式中新增如下**:

void carraydlg::onarraycpoint() 

{ carray m_array;

m_array.setsize(10,10);

cpoint pt1(10,10);

m_array.add(pt1);

cpoint pt2(10,50);

m_array.add(pt2);

cpoint pt3(10,100);

m_array.add(pt3);

int size=m_array.getsize();

cclientdc dc(this);

dc.moveto(0,0);

cpoint pt;

for(int i=0;im_array;

該語句定義乙個carray陣列物件,模板類carray有兩個引數,第乙個引數為陣列元素的型別,該例中是cpoint,即m_array是cpoint陣列;第二個引數為引用型別,一般有兩種選擇,一種選擇與第乙個引數型別相同,它意味著陣列物件作為引數傳遞時,傳遞的是陣列物件。第二種選擇是第乙個引數型別的引用,它意味著陣列物件作為引數傳遞時,傳遞的是陣列物件的指標。因此,尤其對於較複雜的陣列結構型別,推薦使用引用傳遞,節約記憶體同時加快程式執行速度,正如本例使用的是cpoint&。
m_array.setsize(10,10);
setsize函式設定陣列的大小,該函式有兩個引數,第乙個引數設定陣列的大小;第二個引數設定陣列增長時記憶體分配的大小,預設值是-1,使用預設值可以保證記憶體分配得更加合理。本例中第二個引數是10,意即增加乙個陣列元素會分配10個元素大小的記憶體供陣列使用。

您可以隨時使用setsize函式設定陣列的大小,如果第乙個引數值小於陣列已有成員數量,多於第乙個引數值的成員將被截去並釋放相應記憶體。

在使用carray陣列前,最好先使用setsize確定其大小並申請儲存空間。如果不這樣做,向陣列中增加元素時,需要不斷地移動和拷貝元素造成執行的低效率和記憶體碎塊。

m_array.add(pt1);
add函式新增陣列元素。
int size=m_array.getsize();
getsize返回陣列元素的數目。for(int i=0;i

最後再說明一點:removeat,insertat函式操作時會使得陣列元素移位,執行時間大於setat,removeall,add函式。

希望這篇文章能對您有所幫助。

使用MFC的陣列類

mfc的陣列類支援的陣列類似於c 中的常規陣列,可以存放任何資料型別。c 的常規陣列在使用前必須將其定義成能夠容納所有可能需要的元素,而mfc陣列類建立的物件可以根據需要動態地增大或減小,陣列的起始下標是0,而上限可以是固定的,也可以隨著元素的增加而增加,陣列在記憶體中的位址仍然 是連續分配的。mf...

VC 使用MFC的陣列類

使用mfc的陣列類 mfc 的陣列類支援的陣列類似於c 中的常規陣列,可以存放任何資料型別。c 的常規陣列在使用前必須將其定義成能夠容納所有可能需要的元素,而mfc陣列 類建立的物件可以根據需要動態地增大或減小,陣列的起始下標是0,而上限可以是固定的,也可以隨著元素的增加而增加,陣列在記憶體中的位址...

MFC陣列類CArray的使用

mfc陣列類carray的使用的操作詳解 mfc的陣列類支援的陣列類似於常規陣列,可以存放任何資料型別。常規陣列在使用前必須將其定義成能夠容納所有可能需要的元素,即先確定大小,而 mfc陣列類建立的物件可以根據需要動態地增大或減小,陣列的起始下標是 0,而上限可以是固定的,也可以隨著元素的增加而增加...