CArray的使用方法

來源:互聯網
上載者:User

MFC的數組類支援的數組類似於常規數組,可以存放任何資料類型。常規數組在使用前必須將其定義成能夠容納所有可能需要的元素,即先確定大小,而MFC數組類建立的對象可以根據需要動態地增大或減小,數組的起始下標是0,而上限可以是固定的,也可以隨著元素的增加而增加,數組在記憶體中的地址仍然是連續分配的。MFC定義了數組模板類CArray,並針對各種常用變數類型定義了CByteArray,CArray,CUIntArray,CDArray,CStringArray,CObArray,CPtrArray。如下:

 

數組類

變數類型

 變數數值範圍

 標頭檔

CArray

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

 

Afxtempl.h

CByteArray

8位不帶正負號的整數 BYTE類型

0—255

Afxcoll.h

CArray

16位不帶正負號的整數 WORD類型

0—65535

Afxcoll.h

CDArray

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 www.開啟++ 6.0,建立基於對話方塊的工程Array。CArrayDlg類聲明檔案(ArrayDlg.h)中添加語句:

 #include <afxtempl.h>  

請記住:使用CArray一定要包含標頭檔afxtempl.h。

開啟主對話方塊資源IDD_ARRAY_DIALOG,添加一個按鈕IDC_ARRAY_CPOINT,標題為CArray_CPoint,雙擊該按鈕,在OnArrayCpoint()函數中添加如下代碼:

void CArrayDlg::OnArrayCpoint()<br />{<br /> CArray <CPoint,CPoint&> m_Array;<br /> m_Array.SetSize(10,10);<br /> CPoint pt1(10,10);<br /> m_Array.Add(pt1);<br /> CPoint pt2(10,50);<br /> m_Array.Add(pt2);<br /> CPoint pt3(10,100);<br /> m_Array.Add(pt3);<br /> int size=m_Array.GetSize();<br /> CClientDC dc(this);<br /> dc.MoveTo(0,0);<br /> CPoint pt;<br /> for(int i=0;i<size;i++)<br /> {<br /> pt=m_Array.GetAt(i);<br /> dc.LineTo(pt);<br /> }<br />}<br />

代碼簡要說明:

CArray <CPoint,CPoint&> m_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<size;i++){ pt=m_Array.GetAt(i);     

dc.LineTo(pt);}

為了直觀顯示,該段代碼將各數組元素作成折線畫到螢幕上,其中GetAt(int index)通過index值得到相應的元素值。編譯並運行程式,觀察運行結果。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.