MFC中數(shù)組類的使用分析.doc_第1頁
MFC中數(shù)組類的使用分析.doc_第2頁
MFC中數(shù)組類的使用分析.doc_第3頁
MFC中數(shù)組類的使用分析.doc_第4頁
MFC中數(shù)組類的使用分析.doc_第5頁
免費預(yù)覽已結(jié)束,剩余1頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

MFC中數(shù)組類的使用分析作者:佚名 來源:不詳 更新時間:2007-3-25 16:49:45 等級: MFC的數(shù)組類支持的數(shù)組類似于C+中的常規(guī)數(shù)組,可以存放任何數(shù)據(jù)類型。C+的常規(guī)數(shù)組在使用前必須將其定義成能夠容納所有可能需要的元素,而MFC數(shù)組類創(chuàng)建的對象可以根據(jù)需要動態(tài)地增大或減小,數(shù)組的起始下標(biāo)是0,而上限可以是固定的,也可以隨著元素的增加而增加,數(shù)組在內(nèi)存中的地址仍然是連續(xù)分配的。MFC定義了數(shù)組模板類CArray,并針對各種常用變量類型定義了CByteArray,CWordArray,CUIntArray,CDWordArray,CStringArray,CObArray,CPtrArray。詳見下表: 數(shù)組類變量類型變量數(shù)值范圍 頭文件 CArray通過模板類的參數(shù)類型設(shè)定各種類型Afxtempl.h CByteArray8位無符號整數(shù) BYTE類型0255Afxcoll.h CWordArray16位無符號整數(shù) WORD類型065535Afxcoll.h CDWordArray32位無符號整數(shù) DWORD類型04294967295Afxcoll.h CUIntArray32位無符號整數(shù) UINT類型 04294967295Afxcoll.h CStringArray CString字符串 string字符串Afxcoll.h CObArrayCObject類及其派生類Afxcoll.hCPtrArray void* 類型指針Afxcoll.hMFC數(shù)組類使用方法基本相同,下面分別以CArray和CUIntArray為例演示說明數(shù)組類的使用方法。使用 CArray 打開VC+ 6.0,創(chuàng)建基于對話框的工程Array。CArrayDlg類聲明文件(ArrayDlg.h)中添加語句: #include 請記?。菏褂肅Array一定要包含頭文件afxtempl.h。 打開主對話框資源IDD_ARRAY_DIALOG,添加一個按鈕IDC_ARRAY_CPOINT,標(biāo)題為CArray_CPoint,雙擊該按鈕,在OnArrayCpoint()函數(shù)中添加如下代碼: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;isize;i+)pt=m_Array.GetAt(i);dc.LineTo(pt);代碼簡要說明: CArray m_Array;該語句定義一個CArray數(shù)組對象,模板類CArray有兩個參數(shù),第一個參數(shù)為數(shù)組元素的類型,該例中是CPoint,即m_Array是CPoint數(shù)組;第二個參數(shù)為引用類型,一般有兩種選擇,一種選擇與第一個參數(shù)類型相同,它意味著數(shù)組對象作為參數(shù)傳遞時,傳遞的是數(shù)組對象。第二種選擇是第一個參數(shù)類型的引用,它意味著數(shù)組對象作為參數(shù)傳遞時,傳遞的是數(shù)組對象的指針。因此,尤其對于較復(fù)雜的數(shù)組結(jié)構(gòu)類型,推薦使用引用傳遞,節(jié)約內(nèi)存同時加快程序運行速度,正如本例使用的是CPoint&。 m_Array.SetSize(10,10);SetSize函數(shù)設(shè)定數(shù)組的大小,該函數(shù)有兩個參數(shù),第一個參數(shù)設(shè)定數(shù)組的大??;第二個參數(shù)設(shè)定數(shù)組增長時內(nèi)存分配的大小,缺省值是1,使用缺省值可以保證內(nèi)存分配得更加合理。本例中第二個參數(shù)是10,意即增加一個數(shù)組元素會分配10個元素大小的內(nèi)存供數(shù)組使用。 您可以隨時使用SetSize函數(shù)設(shè)定數(shù)組的大小,如果第一個參數(shù)值小于數(shù)組已有成員數(shù)量,多于第一個參數(shù)值的成員將被截去并釋放相應(yīng)內(nèi)存。 在使用CArray數(shù)組前,最好先使用SetSize確定其大小并申請存儲空間。如果不這樣做,向數(shù)組中增加元素時,需要不斷地移動和拷貝元素造成運行的低效率和內(nèi)存碎塊。 m_Array.Add(pt1);Add函數(shù)添加數(shù)組元素。 int size=m_Array.GetSize();GetSize返回數(shù)組元素的數(shù)目。 for(int i=0;isize;i+)pt=m_Array.GetAt(i);dc.LineTo(pt);為了直觀顯示,該段代碼將各數(shù)組元素作成折線畫到屏幕上,其中GetAt(int index)通過index值得到相應(yīng)的元素值。編譯并運行程序,觀察運行結(jié)果。繼續(xù)演示如何使用CArray 再次打開主對話框資源IDD_ARRAY_DIALOG,添加一個按鈕IDC_ARRAY_CSTRING,標(biāo)題為CArray_CString,雙擊該按鈕,在OnArrayCstring ()函數(shù)中添加如下代碼: void CArrayDlg:OnArrayCstring() CArray m_string;CString sztiger(tiger);CString szbear(bear);CString szdog(dog);m_string.SetAtGrow(0,sztiger);m_string.SetAtGrow(2,szdog);m_string.InsertAt(1,szbear);int count=m_string.GetSize();CClientDC dc(this);dc.SetBkMode(TRANSPARENT);TEXTMETRIC textMetric;dc.GetTextMetrics(&textMetric);int fontHeight=textMetric.tmHeight;int displayPos=10;for(int x=0;xcount;+x)dc.TextOut(10,displayPos,m_stringx);displayPos+=fontHeight;AfxMessageBox(Continue.);m_string.RemoveAt(2);count=m_string.GetSize();for(x=0;xcount;+x)dc.TextOut(10,displayPos,m_stringx);displayPos+=fontHeight;AfxMessageBox(A string has delete,continue.);m_string.RemoveAll();count=m_string.GetSize();if(count=0)AfxMessageBox(All elements are deleted.);代碼簡要說明:m_string.SetAtGrow(2,szdog);SetAtGrow有兩個參數(shù),第一個參數(shù)決定數(shù)組元素的序號值,第二個參數(shù)是元素的值。該函數(shù)根據(jù)序號值設(shè)置相應(yīng)數(shù)組元素的值,功能與SetAt相近,不同之處是使用該函數(shù)設(shè)置元素值時,如果序號值大于數(shù)組的上界,數(shù)組會自動增長。編譯運行程序,細(xì)心的讀者您可能會看到,第一行字符是“tiger”,第二行字符是“bear”,這是我們預(yù)料之中的,但第三行是空串,第四行是“dog”。空串是怎樣造成的呢?細(xì)分析下面三行代碼就可以知道: m_string.SetAtGrow(0,sztiger);m_string.SetAtGrow(2,szdog);m_string.InsertAt(1,szbear);第一行設(shè)定元素0為“tiger”,這是沒有疑義的。第二行設(shè)定元素2為“dog”,但是在設(shè)定元素2的同時自動將元素1填充為空串。第三行插入“bear”為元素1,同時原來的元素1和元素2后移為元素2和元素3。怎么樣,這回明白了吧。m_string.InsertAt(1,szbear);InsertAt函數(shù)在指定序號處插入相應(yīng)元素,該函數(shù)在執(zhí)行過程中,插入點后面的元素會自動后移。 dc.TextOut(10,displayPos,m_stringx); 其中,m_stringx是數(shù)組類對操作符的重載,數(shù)組類CArray允許使用操作符,類似于C+的常規(guī)數(shù)組。m_stringx也可以用m_string.GetAt(x)替代。 m_string.RemoveAt(2);RemoveAt只有一個參數(shù),即元素序號值。該函數(shù)根據(jù)元素序號值刪除相應(yīng)元素值,后面的元素會自動前移。 m_string.RemoveAll();RemoveAll刪除所有元素值演示使用CUIntArray類打開主對話框資源IDD_ARRAY_DIALOG,添加一個按鈕IDC_CUINTARRAY,標(biāo)題為CUIntArray,雙擊該按鈕,在OnCuintarray ()函數(shù)中添加如下代碼:void CArrayDlg:OnCuintarray() CUIntArray m_array;m_array.SetSize(5,5);m_array.SetAt(0,0);m_array.SetAt(1,1);m_array.SetAt(2,2);m_array.SetAt(3,3);m_array.SetAt(4,4);int count=m_array.GetSize();CClientDC dc(this);dc.SetBkMode(TRANSPARENT);TEXTMETRIC textMetric;dc.GetTextMetrics(&textMetric);int fontHeight=textMetric.tmHeight;int displa

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論