MFC中動(dòng)態(tài)數(shù)組CArray的使用.pdf

MFC中動(dòng)態(tài)數(shù)組CArray的使用.pdf

ID:57300836

大小:204.76 KB

頁(yè)數(shù):3頁(yè)

時(shí)間:2020-08-10

MFC中動(dòng)態(tài)數(shù)組CArray的使用.pdf_第1頁(yè)
MFC中動(dòng)態(tài)數(shù)組CArray的使用.pdf_第2頁(yè)
MFC中動(dòng)態(tài)數(shù)組CArray的使用.pdf_第3頁(yè)
資源描述:

《MFC中動(dòng)態(tài)數(shù)組CArray的使用.pdf》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫(kù)

1、MFC中動(dòng)態(tài)數(shù)組CArray的使用數(shù)組——這個(gè)C語(yǔ)言中的怪物,自從被直接繼承到C++中,便讓無(wú)數(shù)有識(shí)之士們前赴后繼、絞盡腦汁,試圖尋找一種可以動(dòng)態(tài)增長(zhǎng)的替代數(shù)據(jù)類型。當(dāng)然,最著名的,應(yīng)該就是vector向量。但是,它的數(shù)據(jù)定義極其復(fù)雜,還有迭代的出現(xiàn),幾乎徹底摧毀了它僅存的一點(diǎn)優(yōu)勢(shì)。所以,引入MFC之后,微軟斬釘截鐵地拋棄了標(biāo)準(zhǔn)C++的模板庫(kù)。CArray是MFC中非常重要的幾個(gè)類模板之一,其他的還有CList、CMap等,但它們的定義略微有點(diǎn)晦澀。以我自己的經(jīng)驗(yàn),在MFC中使用CArray定義動(dòng)態(tài)數(shù)組是非常方便的。在MSDN

2、中,CArray的聲明如下:templateclassCArray:publicCObject參數(shù)TYPE模板參數(shù),指定存儲(chǔ)在數(shù)組中對(duì)象的類型。TYPE是CArray返回的參數(shù)類型。ARG_TYPE模板參數(shù),指定用來(lái)訪問(wèn)存儲(chǔ)在數(shù)組中對(duì)象的變量類型,通常是TYPE的引用。ARG_TYPE是傳遞給CArray的參數(shù)類型。備注CArray類支持與C中相似的數(shù)組,但是必要時(shí)可以動(dòng)態(tài)收縮和增長(zhǎng)。數(shù)組索引總是從0開始。你可以決定是固定數(shù)組上界還是允許當(dāng)添加元素超過(guò)當(dāng)前邊界時(shí)擴(kuò)展數(shù)組。內(nèi)存被

3、連續(xù)地分配到上界,即使一些元素可能為空。和C中數(shù)組一樣,CArray索引元素的訪問(wèn)時(shí)間是不變的,與數(shù)組大小無(wú)關(guān)。提示在使用一個(gè)數(shù)組之前,使用SetSize建立它的大小和為它分配內(nèi)存。如果不使用SetSize,則為數(shù)組添加元素就會(huì)引起頻繁地重新分配和拷貝。頻繁地重新分配和拷貝不但沒有效率,而且會(huì)導(dǎo)致內(nèi)存碎片。如果需要一堆數(shù)組中的個(gè)別數(shù)據(jù),必須設(shè)置CDumpContext對(duì)象的深度為1或更大。此類的某些成員函數(shù)調(diào)用全局幫助函數(shù),它必須為CArray的大多數(shù)使用而定制。請(qǐng)參閱宏和全局量章節(jié)中的CollectionClassHelpe

4、rs。當(dāng)從一個(gè)CArray對(duì)象中移去元素時(shí),幫助函數(shù)DestructElements被調(diào)用。當(dāng)添加元素時(shí),幫助函數(shù)ConstructElements被調(diào)用。數(shù)組類的派生與列表的派生類似。有關(guān)使用CArray類的更多信息,請(qǐng)參考VisualC++Programmer'sGuide中的論文集。#include看到上面這么一大段文字是不是覺得有點(diǎn)頭暈?MSDN就是這樣的,不然怎么能體現(xiàn)出它的“權(quán)威”呢。其實(shí)不要覺得它很復(fù)雜,使用CArray類構(gòu)造動(dòng)態(tài)數(shù)組非常簡(jiǎn)單。首先,你需要包含頭文件Afxtempl.h,然

5、后就可以定義自己的動(dòng)態(tài)數(shù)組了。例如定義一個(gè)int型和CPoint型的動(dòng)態(tài)數(shù)組:#includeCArraynum;CArraypt;//也可以這樣:CArraypt;現(xiàn)在,我們構(gòu)造了兩個(gè)動(dòng)態(tài)數(shù)組,按照MSDN的提示,我們要使用SetSize函數(shù)建立它的大小和分配內(nèi)存。(但其實(shí)這一步可以省略,而且我自己就是這么做的,雖然這不符合一個(gè)規(guī)范程序員的風(fēng)格。)SetSize的函數(shù)原型是:voidSetSize(intnNewSize,

6、intnGrowBy=-1);這個(gè)函數(shù)在MSDN中也有詳細(xì)的說(shuō)明,我就不再去翻譯了。其中第一個(gè)參數(shù)指定數(shù)組大小,即數(shù)組中元素個(gè)數(shù)(必需大于或等于0)。對(duì)于第二個(gè)參數(shù),MSDN中有這樣一句話:如果使用了默認(rèn)值,MFC以一種在大多數(shù)情況下能夠避免內(nèi)存碎片和最高效的方式去分配內(nèi)存。既然人家MSDN都這么說(shuō)了,那我們第二個(gè)參數(shù)就使用它的默認(rèn)值了。如果要加上這一步的話,可以這么寫(我們先不寫):num.SetSize(40);//其實(shí)大小設(shè)為多少?zèng)]有關(guān)系,只要是你認(rèn)為最合適的就行了pt.SetSize(10);//一般地,設(shè)得大些可以避

7、免內(nèi)存碎片和提高效率,但所需空間越大現(xiàn)在我們可以使用Add函數(shù)向數(shù)組中添加一個(gè)元素,也可以用GetAt函數(shù)來(lái)獲得一個(gè)元素。它們的函數(shù)的原型分別是:intAdd(ARG_TYPEnewElement);TYPEGetAt(intnIndex)const;Add函數(shù)向數(shù)組末尾增加一個(gè)元素,必要的話會(huì)擴(kuò)展數(shù)組,它返回增加元素的索引值。GetAt函數(shù)返回給定索引的元素值。例如,我們可以這樣寫:for(inti=0;i<20;i++)num.Add(i);//數(shù)組大小為20,數(shù)組中元素依次為0,1,2,…,19intn=num.GetA

8、t(10);//由于索引是從0開始,得到第11個(gè)元素,也就是10CPointpoint(100,100);pt.Add(point);//或者不用定義point,直接pt.Add(CPoint(100,100));需要特別說(shuō)明的是,如果使用了SetSize函數(shù),上面介紹的Ad

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。