- 1、本文档共16页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第六章 使用MFC集合类
第五章 使用MFC集合类 学习目标 了解MFC集合类 我们在使用vc进行比较复杂的编程时,经常需要用到复杂的数组结构,并希望能实现动态管理。 MFC提供了一套模板库,来实现一些比较常见的数据结构。3种结构都有不用的运算优势,供开发者根据项目需要灵活选择。 CArray(动态数组):对于以顺序索引速度最快。 CList(动态链表):插入删除任意位置的节点最快。 CMap(映射):最大优势是它的快速查找的优秀性。 以上类库都是以C++模板方式编写的。 任何数据类型,都可以使用MFC集合类进行管理。 开发者在使用时,通过模板参数可以任意指定节点类型。 例如:CArrayCPoint,CPoint,CListCString,CString 对于最常用的基本数据类型,MFC将其实例化。 直接使用这些实例类,开发过程更方便快捷,例如: CUIntArray, CDWordArray CStringList, CPtrList CMapWordToPtr,CMapStringToPtr,CMapStringToString 动态数组类(CArray) CArray(动态数组)的特点: MFC的数组类支持的数组类似于C语言的常规数组,可以存放任何数据类型。 C++的常规数组在使用前必须将其定义成能够容纳所有可能需要的元素,而MFC数组类创建的对象可以根据需要动态地增大或减小。 数组的起始下标是0,而上限可以是固定的,也可以随着元素的增加而增加,数组在内存中的地址仍然是连续分配的。 CArray的实例: CArray的算法特点 使用数组类CArray 新建一个SDI工程,例如Layer: 在View类的头文件中,定义成员变量,例如: CArrayCPoint,CPoint m_array。 如果CArray未定义,在stdafx.h中添加包含文件afxtempl.h。 添加左键消息OnLButtonDown,在数组中加入点击的坐标点。 在OnDraw界面显示数组内所有的节点。 双向链表类(CList) CList也是MFC中的一个集合类 它的内部实现机制是一个双向链表。 可以用来存储有序的、可重复值的元素(节点)。 每个节点对应一个POSTION类型的迭代器。 可以通过POSITION类型的迭代器进行节点的遍历、插入、删除等操作。 CList的迭代器POSITION 迭代器是近年在链表使用中的一个常用技术。 POSITION,其实就是一个类似于学号的指针 。 MFC用他来表示元素的位置。 // abstract iteration positionstruct __POSITION { };typedef __POSITION* POSITION; 在CList中,定义了几个迭代器的函数。方便了我们去访问数据元素。 GetHeadPosition 返回链表头部节点位置。 GetTailPosition 返回链表尾部节点位置。 GetNext和GetPrev 返回当前位置上或下一个节点的位置。 CList的算法特点 查看MSDN类库函数说明,CList主要的增删改等操作函数。 AddHead/AddTail:在头部/尾部添加一个新的节点。 InsertBefore/InsertAfter:在指定位置前/后添加一个节点。 GetHeadPosition/GetTailPosition:取得头/尾节点的位置。 RemoveAt:删除指定位置删除一个节点。 GetAt:返回指定位置的节点数值(不可修改/引用可修改)。 GetPrev/GetNext:取得上/下一个节点的位置,并返回改变前的节点数值。 GetCount:返回链表中节点总数。 RemoveAll:清空链表中所有接点并使Count归零。 Find:内部遍历查找指定数值,返回节点所在的位置。 FindIndex:内部循环找到指定索引的节点位置。 List采用链表方式存储数据,因而当链表数据有所变动时,只做了一下指向变动,所以即使数据元素非常多单个数据元素也很大,执行Insert/Add/Remove的速度都很快,但是因为没有统一的Index,因而如果要找到某个元素只有遍历整个链表。整体上说,List的使用比较繁琐,特别为小尺寸数据设计List更是得不偿失的,这也是为什么有CWordArray而没有CWordList的原因,因而在大多数情况下应该有限考虑是否可以使用Array来存储数据。 ? 使用双向链表CList MFC提供了较少的CList实例 CStringList、CPtrList和CObList。 注意使用GetNext的返回值 早期使用CList遍历,一般先使用GetAt取的数值。 再调用GetNext取下一节点的指针,其实直接用GetNext返回值即可。 映射表类(
您可能关注的文档
最近下载
- 义务教育版(2024)信息科技三年级全一册第18课 《在线行为规范》教学设计.docx VIP
- 《数据结构》教学大纲《数据结构》教学大纲.doc VIP
- 2023年淮安市(中小学、幼儿园)教师招聘笔试试题及答案解析.docx VIP
- 2025年湖北省襄阳市中考地理试卷(含答案).docx
- 2023制造业企业质量管理能力评估规范.pdf VIP
- 标点符号在使用中容易出现的错误.pdf VIP
- 2024年淮安市(中小学、幼儿园)教师招聘笔试试题及答案解析.docx VIP
- 2023年东莞理工学院数据科学与大数据技术专业《数据结构与算法》科目期末试卷A(有答案).docx VIP
- KYN28A-12高压开关柜使用说明书.pdf VIP
- 二手设备买卖协议范本5篇.docx
文档评论(0)