【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;

    

View Code
    //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; 
posted @ 2011-11-16 16:36  陈昂  阅读(2634)  评论(0编辑  收藏  举报