<menu id="w8yyk"><menu id="w8yyk"></menu></menu>
  • <dd id="w8yyk"><nav id="w8yyk"></nav></dd>
    <menu id="w8yyk"></menu>
    <menu id="w8yyk"><code id="w8yyk"></code></menu>
    <menu id="w8yyk"></menu>
    <xmp id="w8yyk">
    <xmp id="w8yyk"><nav id="w8yyk"></nav>
  • 網站首頁 > 物聯資訊 > 技術分享

    MFC模板CArray及其派生類

    2016-09-28 00:00:00 廣州睿豐德信息科技有限公司 閱讀
    睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接

    CArray及其派生類

    1. 簡介:訪問方法及效率和普通的數組一樣,比普通數組強大的功能是可以改變數組的大小。Array采用隊列方式存儲數據,因而其內部數據元素是以物理方式順序排列的,所以檢索、順序執行GetAt()等函數的速度是相當快的。但是由于每次隊列長度變化后,數據都要重新申請內存、拷貝內存、釋放內存,Insert/Add/RemoveAt()的速度都很慢。

       特點:通過索引(數組下標)訪問的速度很快,但是插入刪除操作很慢,因為插入刪除操作時,是需要移動元素的。

    訪問方法:通過索引訪問,普通的數組怎么用,它就可以怎么用。

    2. MFC數組類CArray的使用的操作詳解

    MFC的數組類支持的數組類似于常規數組,可以存放任何數據類型。常規數組在使用前必須將其定義成能夠容納所有可能需要的元素,即先確定大小,而MFC數組類創建的對象可以根據需要動態地增大或減小,數組的起始下標是0,而上限可以是固定的,也可以隨著元素的增加而增加,數組在內存中的地址仍然是連續分配的。

    MFC定義了數組模板類CArray,并針對各種常用變量類型定義了CByteArray,CArray,CUIntArray,CDArray,CStringArray,CObArray,CPtrArray。

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

    CByteArray    8位無符號整數 BYTE類型

    CArray       16位無符號整數 WORD類型

    CDArray    32位無符號整數 DWORD類型

    CUIntArray     32位無符號整數 UINT類型

    CStringArray CString字符串 string字符串

    CObArray       CObject類及其派生類

    CPtrArray       void* 類型指針

    CArray

    CObject

    └CArray

    template <class TYPE, class ARG_TYPE> class CArray : public CObject

    參數:

    TYPE 模板參數指定存儲在數組中的對象的類型。TYPE是一個由CArray返回的參數。

    ARG_TYPE 模板參數指定用于訪問存儲在數組中對象的參數類型。通常是一個對TYPE的參考。ARG_TYPE是一個傳遞給CArray的參數。

    如1:CArray <CPoint,CPoint&> m_Array;

    如2:CArray<int, int>   myArray; //對于基本類型如int,char和float一般要用參數傳遞

    說明:

    CArray類支持與CArray相似的數組,但是必要時可以動態壓縮并擴展。數組索引從0開始。可以決定是固定數組上界還是允許當添加元素時擴展當前的邊界。內存對上界是連續地分配空間,甚至一些元素可為空。和CArray一樣,CArray索引元素的訪問時間是不變的,與數組大小無關。

    提示:

    在使用一個數組之前,使用SetSize建立它的大小和為它分配內存。如果不使用

    SetSize,則為數組添加元素就會引起頻繁地重新分配和拷貝。頻繁地重新分配和拷

    貝不但沒有效率,而且導致內存碎片。

    中的“收集”。

    #include <afxtempl.h>

    CArray類的成員

    構造函數

    CArray

    構造一個空數組屬性

    GetSize

    獲得此數組中的元素數

    GetUpperBound

    返回最大的有效索引值

    SetSize

    設置包含在此數組中的元素數

    操作

    FreeExtra

    釋放大于當前上界的未使用的內存

    RemoveAll

    從此數組移去所有元素元素訪問

    GetAt

    返回在給定索引上的值

    SetAt

    設定一個給定索引的值;數組不允許擴展

    ElementAt

    返回一個對數組中元素指針的臨時參考

    GetData

    允許對數組中的元素訪問。可以為NULL擴展數組

    SetAtGrow

    為一個給定索引設置值;如果必要,擴展數組

    Add

    在數組的末尾添加元素;如果必要,擴展數組

    Append

    在數組上附加另一個數組;如果必要,擴展數組

    Copy

    把另一個數組拷貝到數組上;如果必要,擴展數組

    插入/移去

    InsertAt

    在指定的索引上插入一個元素(或另一個數組中的所有元素)

    RemoveAt

    在指定的索引上移去一個元素

    運算符

    operator []

    在特定索引上設置或獲取元素

    CArray應用舉例:源代碼:http://download.csdn.net/detail/nuptboyzhb/4211672

     

    1.       新鍵一個基于對話框的應用程序,命名為CArrayTest,在 CarrayTestDlg.h文件在添加CArray的頭文件#include <afxtempl.h>

    2.       為對話框新增一個成員變量:

    CArray<CPoint,CPoint&>m_PoinyArray;//保存CPoint類型的數組

    3.       在對話框的OnInitDialog()函數中初始化數組的大小和數組中的值

    int m_point_num=200;

    m_PoinyArray.SetSize(m_point_num);

    for(int i=0;i<m_point_num;i++)

    {

               CPoint tempPT;

               tempPT.x=i;

               tempPT.y=i*10;

               m_PoinyArray.SetAt(i,tempPT);

        }

    //即,點的橫坐標和索引值相同,點的縱坐標是索引值的10背;

    4.       為對話框添加如下控件(詳見源代碼)

     

    4.1   為編輯框關聯一個整型的變量index

    4.2   分別編寫10個按鈕的消息響應函數

     4.2.1獲取

     4.2.2 刪除

     4.2.3 插入

     4.2.4 設定

     4.2.5 SetAtGrow

     4.2.6 GetSize

     4.2.7 GetUpperBound

    4.2.8 Add

    4.2.9 輸出全部的點

    4.2.10刪除全部的點

    以上按鈕,基本涵蓋了CArray類的大部分成員函數;

    CArray的串行化

    CArray不需要串行化,直接調用父類的Serialize函數即可;如:

    void CGraduationDoc::Serialize(CArchive& ar)

    {

             if (ar.IsStoring())

             {

                       // TODO: add storing code here

    m_ObArray.Serialize(ar);

             }

             else

             {

                       // TODO: add loading code here

    m_ObArray.Serialize(ar);

             }

    }

    注意:CArray的成員類型,如果不是常見的可串行化的類型,則必須各自實現自己的串行化!

    RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成
    最近免费观看高清韩国日本大全