天天看點

【MFC】容器類的使用

  對于MFC中所提到的基本容器類,做一個基本的介紹和程式設計操作。

  如有資料結構基礎,可以直接看第四部分對容器類的操作。

  第一,MFC提供三種基本的容器類:arrays(數組), lists(連結清單), maps(映射,也稱作字典).

  第二,各容器類的特征分類

類型 排序? 索引? 插入元素 查找特定元素 重複的元素?
List Yes No Fast Slow Yes
Array Yes By int Slow Slow Yes
Map No By key Fast Fast

No (keys)

Yes (values)

  第三,模闆容器類和非模闆容器類

  模闆容器類:

Collection contents Arrays Lists Maps
任意對象類型的容器 CArray CList CMap
任意對象指針類型的容器 CTypedPtrArray CTypedPtrList CTypedPtrMap

  非模闆容器類:

Arrays Lists Maps
CObArray CObList CMapPtrToWord
CByteArray CPtrList CMapPtrToPtr
CDWordArray CStringList CMapStringToOb
CPtrArray CMapStringToPtr
CStringArray CMapStringToString
CWordArray CMapWordToOb
CUIntArray CMapWordToPtr

  第四,模闆容器類的使用

  1,簡單的容器類的使用  CArray, CList, CMap

    1.1 CArray的使用

      基本資料類型 ,如int, char, and float

      

CArray<int, int> myArray;       結構體或者類

      

CArray<CPerson, CPerson&> myArray;

    1.2 CList的使用

      基本資料類型 ,如int, char, and float

      CList

<int, int> myList;       結構體或者類

      CList<CPerson, CPerson&> myList;

    1.3 CMap的使用 

      CMap< int, int, MY_STRUCT, MY_STRUCT& > myMap1;

      CMap< CString, LPCSTR, CPerson, CPerson& > myMap2;

    

//map映射表

    CMap<int, int, CPoint, CPoint>    myMap;

    //初始化哈希表,并指定其大小(數字為120%容量,最好取奇數)

    myMap.InitHashTable(13);

    //添加中繼資料

    for (i=0; i<10; i++)

    {

        myMap.SetAt(i, CPoint(i,i*i));

    }

    //周遊一次

    POSITION pos = myMap.GetStartPosition();

    while(pos != NULL)

    {

        CPoint pt;

        myMap.GetNextAssoc(pos, i, pt);

    }

    //查找特定元素

    pos = myMap.GetStartPosition();

    while(pos != NULL)

    {

        CPoint pt;

        myMap.GetNextAssoc(pos, i, pt);

        if (i == 3)

        {

            CString str;

            str.Format(_T("x:%d y:%d"), pt.x, pt.y);

            MessageBox(str);

        }

    }

    //删除資料

    myMap.RemoveAll();

2, 指針類型的容器類的使用 CTypedPtrArray, CTypedPtrList, CTypedPtrMap

    2.1 CTypedPtrArray的使用

      

CTypedPtrArray<BASE_CLASS, TYPE>   

        //BASE_CLASS:為 CObArray or CPtrArray

      

CTypedPtrArray<CObArray, CPerson*> myArray;

    2.2 CTypedPtrList的使用

      CTypedPtrList<BASE_CLASS, TYPE>    

        //BASE_CLASS: 為  CObList or CPtrList

     CTypedPtrList<CPtrList, MY_STRUCT*> myList;

    2.3 CTypedPtrMap的使用

      CTypedPtrMap<BASE_CLASS, KEY,VALUE> 

        //BASE_CLASS: 為CMapPtrToWord, CMapPtrToPtr, CMapStringToPtr, CMapWordToPtr, CMapStringToOb 

     CTypedPtrMap<CMapPtrToPtr, CString, MY_STRUCT*> myPtrMap;            
     CTypedPtrMap<CMapStringToOb, CString, CMyObject*> myObjectMap;            

文章轉自:http://www.cnblogs.com/chenang/archive/2011/11/16/2251424.html

繼續閱讀