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 myArray;
      结构体或者类

      CArray myArray;

    1.2 CList的使用

      基本数据类型 ,如int, char, and float

      CList myList;
      结构体或者类

      CList myList;

    1.3 CMap的使用 

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

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

    

//map映射表
CMap<<FONT face="Courier New">int, int, CPoint, CPoint> myMap; 

//初始化哈希表,并指定其大小(数字为120%容量,最好取奇数)
myMap.InitHashTable(13);

//添加元数据 
for (i=0; i<<SPAN style="COLOR: #800080">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:为 CObArray or CPtrArray

      CTypedPtrArray myArray;

    2.2 CTypedPtrList的使用

      CTypedPtrList    

        //BASE_CLASS: 为  CObList or CPtrList

      CTypedPtrList myList;

    2.3 CTypedPtrMap的使用

      CTypedPtrMap 

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

     CTypedPtrMap myPtrMap;
     CTypedPtrMap myObjectMap;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值