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

 

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

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是一本填补“使用向导”的VisualC++书籍、产品文档以及MFC源代码之间空隙的MFC书籍。本书是了解MFC内幕的向导,提供了关于那些没有文档记录的MFC、实用函数和数据成员的独一无二并且透彻的信息,介绍了有用的编码技巧,并对MFC各个之间的协作方式进行了重要的分析。 本书的第一部分包含了核心的MFC图形用户界面以及支持它们的,第二部分包含了像OLE这种扩展基本Windows支持的主题。如果做到以下几点,你就可以成为一位透彻理解MFC实现细节的专家:探索MFC文档/视图结构的内幕,从而学习视图同步、打印和打印预览;更深入地了解MFC序列化中那些没有文档记录的方面和一些没有文档记录的,例如CPreview、CPreviewDC、CMirrorFile以及CDockBar等等;最后理解MFC 和OLE是如何共同运作的,以及OLE控悠扬是如何实现的;积累技巧,学会自己研究和理解MFC源代码。 目录: 前言 致谢 简介 第1章 MFC的概念性总括 面向对象编程的一些背景 面向对象编程术语 通常的对象 对象与C++ 为什么使用OOP 应用程序框架与MFC MFC要点之旅 结语 第2章 基本的Windows支持 MFC与C/SDK 基本的MFC应用程序组件 现在,找到WinMain() 一些其他隐藏的信息 MFC对GDI的支持 结语 第3章 MFC中的消息处理 CCmdTarget和消息映射表 窗口消息 MFC消息映射内幕 MFC如何使用消息映射表 进入消息循环:PreTranslateMessage() 结语 第4章 MFC实用 简单值MFC的集合 CFile家族:MFC对文件的访问 CExcephon:提供更好的错误处理 结语 第5章 CObject 使用CObject的代价 CObject的特性 宏的介绍 运行时的信息 MFC中的持续性 CObject对诊断的支持 CObject的诊断支持内幕 组合在一起 投入使用 是否值得 结语 第6章 MFC对话框和控件 CDialog:模态MFC对话框和非模态MFC对话框 MFC公用对话框 OLE对话框 属性页(也称带标签的对话框) MFC控件 结语 第7章 MFC的文档/视图结构 为什么要用文档/视图 其他原因 旧的方法 体系结构 文档/视图结构内幕 文档舰图内幕再览 结语 第8章 高级文档舰图结构内幕 CMirrorFile CView打印 CView对打印预览支持的内幕 CView的派生:CScrollView CView的另一个派生:CCtrlView 结语 第9章 MFC的增强型用户界面 CSplitterWnd:MFC分割窗口 MFC的CControlBar体系结构 CMiniFrameWnd MFC的MRU文件链表实现 结语 第10章 MFC的DLL与线程 理解状态 MFC的DLL MFC线程 结语 下一章 第11章 用MFC实现COM MFC和OLE COM 何为COM COM接口 GUID 剖析IUnknown接口 COM对象服务器 拥有多个接口的COM MFCCOM 使用MFC创建CoMath MFCCOM和接口映射宏 使用MFC的CoMath 完成服务器的设计 MFC厂的支持 结语 第12章 统一数据传输和MFC 历史回顾 重要的结构 IDataObject接口 OLE剪贴板 MFC的IDataObjeot 延迟供应 深入了解MFC的IDataObject OLE拖放 结语 第13章 使用MFC实现OLE文档 OLE文档101 MFC对OLE文档的支持 使用MFC实现OLE文档服务器 容器朋艮务器的协调工作 使条目无效 保存容器的文档 装载OLE文档 结语 第14章 MFC与自动化 自动化的历史 自动化的功能 使用MFC实现自动化应用程序 自动化的工作机制 COM接口与自动化 实现自动化的另外一种方法:使用型信息 MFC与自动化 结语:使用MFC方式”的结果 第15章OLE控件 VBX及其缺陷 OLE控件 写一个OLE控件 在工程里使用OLE控件 它是如何工作的 MFC和OLE控件的容器 OLE控件的生存周期 OLE连接 OLE控件的事件 MFC如何处理事件 技巧:在一个视图中加入一个事件接收器 OLE控件的属性页 结语 附录A MFC源代码导读 MFC编码技术 探索MFC的工具 MFC源代码指南 愉快的旅途 附录B 本书的示例代码 术语表

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值