<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    jasmine214--love

    只有當(dāng)你的內(nèi)心總是充滿快樂、美好的愿望和寧靜時,你才能擁有強壯的體魄和明朗、快樂或者寧靜的面容。
    posts - 731, comments - 60, trackbacks - 0, articles - 0

    MFC數(shù)組類CArray的使用的操作詳解

    Posted on 2010-08-12 11:23 幻海藍夢 閱讀(630) 評論(0)  編輯  收藏 所屬分類: C++
     

    原文:http://www.cnblogs.com/kingln/archive/2008/08/21/1272962.html

     MFC的數(shù)組類支持的數(shù)組類似于常規(guī)數(shù)組,可以存放任何數(shù)據(jù)類型。常規(guī)數(shù)組在使用前必須將其定義成能夠容納所有可能需要的元素,即先確定大小,MFC數(shù)組類創(chuàng)建的對象可以根據(jù)需要動態(tài)地增大或減小,數(shù)組的起始下標(biāo)是0,而上限可以是固定的,也可以隨著元素的增加而增加,數(shù)組在內(nèi)存中的地址仍然是連續(xù)分配的。
      MFC定義了數(shù)組模板類CArray,并針對各種常用變量類型定義了CByteArray,CArray,CUIntArray,CDArrayCStringArray,CObArray,CPtrArray。詳見下表:edu-cn.com

    數(shù)組類

    變量類型

     變量數(shù)值范圍

     頭文件

    CArray

    通過模板類的參數(shù)類型設(shè)定各種類型

     

         Afxtempl.h

    CByteArray

    8位無符號整數(shù) BYTE類型

    0—255

          Afxcoll.h

    CArray

    16位無符號整數(shù) WORD類型

    0—65535

          Afxcoll.h

    CDArray

    32位無符號整數(shù) DWORD類型

    0—4294967295

          Afxcoll.h

    CUIntArray

    32位無符號整數(shù) UINT類型

    0—4294967295

         Afxcoll.h

    CStringArray

    CString字符串 string字符串

     

         Afxcoll.h

    CObArray

    CObject類及其派生類

     

         Afxcoll.h

    CPtrArray

    void* 類型指針

     

         Afxcoll.h

    中國教程網(wǎng)
    MFC數(shù)組類使用方法基本相同,下面分別以CArrayCUIntArray為例演示說明數(shù)組類的使用方法。

    使用 CArray www.打開++ 6.0,創(chuàng)建基于對話框的工程ArrayCArrayDlg類聲明文件(ArrayDlg.h)中添加語句:

    中國教程網(wǎng)

     #include <afxtempl.h>

    請記?。菏褂?/span>CArray一定要包含頭文件afxtempl.h。
    打開主對話框資源IDD_ARRAY_DIALOG,添加一個按鈕IDC_ARRAY_CPOINT,標(biāo)題為CArray_CPoint,雙擊該按鈕,在OnArrayCpoint()函數(shù)中添加如下代碼:

    void CArrayDlg::OnArrayCpoint()

    {   CArray <CPoint,CPoint&> 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;i<size;i++)

    { pt=m_Array.GetAt(i);           

    dc.LineTo(pt);        }}

    代碼簡要說明:

    CArray <CPoint,CPoint&> m_Array; 中國教程網(wǎng)

      該語句定義一個CArray數(shù)組對象,模板類CArray有兩個參數(shù),第一個參數(shù)為數(shù)組元素的類型,該例中是CPoint,即m_ArrayCPoint數(shù)組;第二個參數(shù)為引用類型,一般有兩種選擇,一種選擇與第一個參數(shù)類型相同,它意味著數(shù)組對象作為參數(shù)傳遞時,傳遞的是數(shù)組對象。第二種選擇是第一個參數(shù)類型的引用,它意味著數(shù)組對象作為參數(shù)傳遞時,傳遞的是數(shù)組對象的指針。因此,尤其對于較復(fù)雜的數(shù)組結(jié)構(gòu)類型,推薦使用引用傳遞,節(jié)約內(nèi)存同時加快程序運行速度,正如本例使用的是CPoint&

    m_Array.SetSize(10,10); 中國教程網(wǎng)

      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); 中國教程網(wǎng)

    Add函數(shù)添加數(shù)組元素。

    int size=m_Array.GetSize();

    GetSize返回數(shù)組元素的數(shù)目。

    for(int i=0;i<size;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<CSTRING,CSTRING&> 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;x<count;++x)  

    {               

      dc.TextOut(10,displayPos,m_string[x]);                                                 displayPos+=fontHeight;  

    }       

    AfxMessageBox("Continue...");

    m_string.RemoveAt(2);

    count=m_string.GetSize(); 

    for(x=0;x<count;++x)      

    {

    dc.TextOut(10,displayPos,m_string[x]);        

    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); edu-cn.com

      SetAtGrow有兩個參數(shù),第一個參數(shù)決定數(shù)組元素的序號值,第二個參數(shù)是元素的值。該函數(shù)根據(jù)序號值設(shè)置相應(yīng)數(shù)組元素的值,功能與SetAt相近,不同之處是使用該函數(shù)設(shè)置元素值時,如果序號值大于數(shù)組的上界,數(shù)組會自動增長。
      編譯運行程序,細心的讀者您可能會看到,第一行字符是“tiger”,第二行字符是“bear”,這是我們預(yù)料之中的,但第三行是空串,第四行是“dog”??沾窃鯓釉斐傻哪??細分析下面三行代碼就可以知道:

    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_string[x]);其中,m_string[x]是數(shù)組類對操作符[]的重載,數(shù)組類CArray允許使用[]操作符,類似于的常規(guī)數(shù)組。m_string[x]也可以用m_string.GetAt(x)替代。

    m_string.RemoveAt(2); edu-cn.com

    RemoveAt只有一個參數(shù),即元素序號值。該函數(shù)根據(jù)元素序號值刪除相應(yīng)元素值,后面的元素會自動前移。

    m_string.RemoveAll();

    RemoveAll刪除所有元素值

      最后再說明一點:RemoveAt,InsertAt函數(shù)操作時會使得數(shù)組元素移位,運行時間大于SetAt,RemoveAllAdd函數(shù)。

    主站蜘蛛池模板: 久久成人a毛片免费观看网站| 亚洲国产av一区二区三区| 亚洲女同成人AⅤ人片在线观看| 亚洲国产欧美日韩精品一区二区三区| 久草视频免费在线| 亚洲午夜视频在线观看| 久久99精品视免费看| 久久精品夜色国产亚洲av| 免费91最新地址永久入口| 亚洲人成依人成综合网| 亚洲国产成人五月综合网 | 免费人成在线视频| 亚洲午夜一区二区三区| 毛片免费视频观看| 亚洲人成网站999久久久综合| 成人免费午间影院在线观看| 免费毛片a线观看| 黄色短视频免费看| 亚洲av中文无码乱人伦在线r▽ | 亚洲精品午夜无码专区| 久久综合国产乱子伦精品免费| 亚洲国产中文在线视频| 在线日韩av永久免费观看| 国产成人高清亚洲一区91| 亚洲国产综合久久天堂| 曰皮全部过程视频免费国产30分钟 | 国产午夜亚洲精品理论片不卡| 国产成人AV免费观看| 亚洲精品中文字幕无乱码| 四虎成人免费网站在线| 国产一级a毛一级a看免费视频| 亚洲国产精品成人精品软件| jjzz亚洲亚洲女人| 鲁大师在线影院免费观看 | 亚洲精品无码专区久久同性男| 日韩伦理片电影在线免费观看| 成人黄动漫画免费网站视频| 曰曰鲁夜夜免费播放视频| yellow视频免费看| 亚洲成人免费网站| 亚洲成a人不卡在线观看|