学习模板和集合类的建议.doc

上传人:re****.1 文档编号:546615473 上传时间:2024-03-18 格式:DOC 页数:7 大小:17.50KB
返回 下载 相关 举报
学习模板和集合类的建议.doc_第1页
第1页 / 共7页
学习模板和集合类的建议.doc_第2页
第2页 / 共7页
学习模板和集合类的建议.doc_第3页
第3页 / 共7页
学习模板和集合类的建议.doc_第4页
第4页 / 共7页
学习模板和集合类的建议.doc_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《学习模板和集合类的建议.doc》由会员分享,可在线阅读,更多相关《学习模板和集合类的建议.doc(7页珍藏版)》请在金锄头文库上搜索。

1、学习模板和集合类的建议 visualc+概念:添加功能 有关选择集合类的建议 本文提供详细信息,以帮助您选择适于特定应用程序需要的集合类。集合类的选择取决于许多因素,包括: 。 类形状的特性:排序、索引和性能,如本主题稍后介绍的集合形状特性表所示类是否使用c+模板 存储在集合中的元素是否可以序列化存储在集合中的元素是否可以转储以用于诊断集合是否是类型安全的 下表集合形状特性总结了可用集合形状的特性。 。 第2列和第3列描述了每个形状的排序和访问特性。在表中,术语“已排序”表示按插入或删除项的顺序确定项在集合中的顺序,而不是指项按其内容排序.术语“已索引”表示集合中的项可以通过整数索引检索,这和

2、典型数组中的项很相似。 。 第4列和第5列描述了每个形状的性能。在需要对集合执行多次插入操作的应用程序中,插入速度可能特别重要;而对于其他应用程序,查找速度可能更重要。 。 第6列描述了每个形状是否允许重复元素. 集合形状特性 形状列表数组映射已排序。是是否已索引。否按整数按键插入元素搜索指定元素快慢快慢慢快重复元素。是是否(键)是(值)下表mfc集合类的特性总结了特定mfc集合类的其他重要特性,可以作为选择原则。您的选择可能取决于特定的因素,如类是否基于c+模板,它的元素是否可以通过mfc的文档序列化机制序列化,它的元素是否可以通过mfc诊断转储机制转储,类是否是类型安全的,即是否可以保证存

3、储在基于类的集合中和从该集合中检索的元素类型。mfc集合类的特性 类carraycbytearraycdwordarrayclist使用c+模板是否否是可以序列化是1是是是1可以转储是1是是是1类型安全否是3是3否cmapcmapptrtoptrcmapptrtowordcmapstringtoobcmapstringtoptr是否否否否是1否否是否是是否是是否否是是取决于类型2取决于类型2取决于类型2否是是1是是是是是是是是是是是是是是是是是是否否否否否是3否否否否否否是3是3是是是是3是3cmapstringtostring否cmapwordtoobcmapwordtoptrcobarra

4、ycoblistcptrarraycptrlistcstringarraycstringlistctypedptrarrayctypedptrlistctypedptrmapcuintarraycwordarray 否否否否否否否否是是是否否1。若要序列化,必须显式调用集合对象的serialize函数;若要转储,必须显式调用集合对象的dump函数。不能用armymap1;cmapmymap2; 第一个示例存储my_struct值,通过int键访问这些值,并通过引用返回访问的my_struct项。第二个示例存储cperson值,通过cstring键访问这些值,并返回对访问项的引用。该示例可以表示

5、简单的通讯簿,可按姓氏在其中查找人员。 因为key参数的类型是cstring且key_type参数的类型是lpcstr,所以键作为cstring类型的项存储在映射中,但通过lpcstr类型的指针在setat等函数中被引用。例如:复制代码 cmapmymap2;cpersonperson; lpcstrlpstrname=mymap2setat(lpstrname,person); 使用类型指针集合模板 若要使用类型指针集合模板,需要知道可以在这些集合中存储的数据类型以及集合声明中所使用的参数类型。 类型指针数组和列表的用法 类型指针数组类ctypedptrarray和列表类ctypedptrl

6、ist采用两个参数:base_class和type。这些类可以存储任何在type参数中指定的数据类型。它们从存储指针的某个非模板集合类中派生,在base_class中指定该基类。对于数组,使用cobarray或cptrarray。对于列表,使用coblist或cptrlist。 实际上,当基于某个类(比如coblist)声明集合时,新类不仅继承其基类的成员,还声明若干其他的类型安全成员函数和运算符,这些函数和运算符通过封装对基类成员的调用来提供类型安全。这些封装管理所有必需的类型转换。例如:复制代码 ctypedptrarraymyarray;ctypedptrlistmylist; 第一个示

7、例声明了从cobarray派生的类型指针数组myarray.该数组存储并返回指向cperson对象(其中cperson是从cobject派生的类)的指针。可以调用任何cobarray成员函数,或者可以调用新的类型安全函数getat和elementat或使用类型安全运算符。 第二个示例声明了从cptrlist派生的类型指针列表mylist。该列表存储并返回指向my_struct对象的指针.基于cptrlist的类用于存储指向不是派生自cobject的对象的指针。ctypedptrlist有若干个类型安全成员函数:gethead、gettail、removehead、removetail、getn

8、ext、getprev和getat。 类型指针映射的用法 类型指针映射类ctypedptrmap采用三个参数:base_class、key和value。base_class参数指定从中派生新类的基类:cmapptrtoword、cmapptrtoptr、cmapstringtoptr、cmapwordtoptr、cmapstringtoob等。key类似于cmap中的key:指定用于查找的键的类型。value类似于cmap中的value:指定存储在映射中的对象类型。例如:复制代码 ctypedptrmapmyptrmap;ctypedptrmapmyobjectmap; 第一个示例是基于cma

9、pptrtoptr的映射,它使用映射到指向my_struct的指针的cstring键。可通过调用类型安全的lookup成员函数来查找存储的指针.可以使用运算符查找存储的指针;如果没有找到,则添加它。并且可以使用类型安全的getnextassoc函数迭代映射。也可以调用cmapptrtoptr类的其他成员函数. 第二个示例是基于cmapstringtoob的映射,它使用映射到指向cmyobject对象的存储指针的字符串键。可以使用在前面的段落中描述的同一类型安全成员,或调用cmapstringtoob类的成员。 注意如果为value参数指定class或struct类型,而不是指定指向该类型的指针

10、或对该类型的引用,则类或结构必须具有复制构造函数。有关更多信息,请参见如何创建类型安全集合。 cobject类的特性 下面,对三种特性分别描述,并说明程序员在派生类中支持这些特性的方法。 1。对运行时类信息的支持 该特性用于在运行时确定一个对象是否属于一特定类(是该类的实例),或者从一个特定类派生来的。cobject提供iskindof函数来实现这个功能。 从cobject派生的类要具有这样的特性,需要: 定义该类时,在类说明中使用declare_dynamic(classnmae)宏; .在类的实现文件中使用implement_dynamic(classname,baseclass)宏。 。

11、 1。对动态创建的支持 前面提到了动态创建的概念,就是运行时创建指定类的实例.在mfc中大量使用,如前所述框架窗口对象、视对象,还有文档对象都需要由文档模板类(cdoctemplate)对象来动态的创建。从cobject派生的类要具有动态创建的功能,需要: 定义该类时,在类说明中使用declare_dyncreate(classnmae)宏;。定义一个不带参数的构造函数(默认构造函数); .在类的实现文件中使用implement_dyncreate(classname,baseclass)宏; 。 学习模板和集合类的建议。doc免费为全国范文类知名网站,下载全文稍作修改便可使用,即刻完成写稿任务。 支付6元已有11人下载 下载这篇word文档 学习模板和集合类的建议(2).doc免费为全国范文类知名网站,下载全文稍作修改便可使用,即刻完成写稿任务. 支付6元已有11人下载 下载这篇word文档

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号