MFC - 数据容器

对于MFC中所提到的基本容器类,做一个基本的介绍和编程操作。

  如有数据结构基础,可以直接看第四部分对容器类的操作。

  第一,MFC提供三种基本的容器类:arrays(数组), lists(链表), maps(映射,也称作字典).

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

类型排序?索引?插入元素查找特定元素重复的元素?
ListYesNoFastSlowYes
ArrayYesBy intSlowSlowYes
MapNoBy keyFastFastNo (keys)
Yes (values)

  第三,模板容器类和非模板容器类

  模板容器类:

Collection contentsArraysListsMaps
任意对象类型的容器CArrayCListCMap
任意对象指针类型的容器CTypedPtrArrayCTypedPtrListCTypedPtrMap

  非模板容器类:

ArraysListsMaps
CObArrayCObListCMapPtrToWord
CByteArrayCPtrListCMapPtrToPtr
CDWordArrayCStringListCMapStringToOb
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;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值