温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
2023
学习
模板
集合
建议
学习模板和集合类的建议
visualc++概念:添加功能
有关选择集合类的建议
本文提供详细信息,以帮助您选择适于特定应用程序需要的集合类。集合类的选择取决于许多因素,包括:
。。。。。
类形状的特性:排序、索引和性能,如本主题稍后介绍的集合形状特性表所示类是否使用c++模板
存储在集合中的元素是否可以序列化存储在集合中的元素是否可以转储以用于诊断集合是否是类型平安的
下表集合形状特性总结了可用集合形状的特性。
。
第2列和第3列描述了每个形状的排序和访问特性。在表中,术语“已排序〞表示按插入或删除项的顺序确定项在集合中的顺序,而不是指项按其内容排序。术语“已索引〞表示集合中的项可以通过整数索引检索,这和典型数组中的项很相似。
。
第4列和第5列描述了每个形状的性能。在需要对集合执行屡次插入操作的应用程序中,插入速度可能特别重要;而对于其他应用程序,查找速度可能更重要。
。
第6列描述了每个形状是否允许重复元素。
集合形状特性
形状列表数组映射已排序。是是否已索引。否按整数按键插入元素搜索指定元素快慢快慢慢快重复元素。是是否(键)是(值)下表mfc集合类的特性总结了特定mfc集合类的其他重要特性,可以作为选择原那么。您的选择可能取决于特定的因素,如类是否基于c++模板,它的元素是否可以通过mfc的文档序列化机制序列化,它的元素是否可以通过mfc诊断转储机制转储,类是否是类型平安的,即是否可以保证存储在基于类的集合中和从该集合中检索的元素类型。mfc集合类的特性
类carraycbytearraycdwordarrayclist使用c++模板是否否是可以序列化是1是是是1可以转储是1是是是1类型平安否是3是3否cmapcmapptrtoptrcmapptrtowordcmapstringtoobcmapstringtoptr是否否否否是1否否是否是是否是是否否是是取决于类型2取决于类型2取决于类型2否是是1是是是是是是是是是是是是是是是是是是否否否否否是3否否否否否否是3是3是是是是3是3cmapstringtostring否cmapwordtoobcmapwordtoptrcobarraycoblistcptrarraycptrlistcstringarraycstringlistctypedptrarrayctypedptrlistctypedptrmapcuintarraycwordarray
否否否否否否否否是是是否否1.假设要序列化,必须显式调用集合对象的serialize函数;假设要转储,必须显式调用集合对象的dump函数。不能用armymap1;cmapmymap2;
第一个例如存储my_struct值,通过int键访问这些值,并通过引用返回访问的my_struct项。第二个例如存储cperson值,通过cstring键访问这些值,并返回对访问项的引用。该例如可以表示简单的通讯簿,可按姓氏在其中查找人员。
因为key参数的类型是cstring且key_type参数的类型是lpcstr,所以键作为cstring类型的项存储在映射中,但通过lpcstr类型的指针在setat等函数中被引用。例如:复制代码
cmapmymap2;cpersonperson;
lpcstrlpstrname=\mymap2->setat(lpstrname,person);
使用类型指针集合模板
假设要使用类型指针集合模板,需要知道可以在这些集合中存储的数据类型以及集合声明中所使用的参数类型。
类型指针数组和列表的用法
类型指针数组类ctypedptrarray和列表类ctypedptrlist采用两个参数:base_class和type。这些类可以存储任何在type参数中指定的数据类型。它们从存储指针的某个非模板集合类中派生,在base_class中指定该基类。对于数组,使用cobarray或cptrarray。对于列表,使用coblist或cptrlist。
实际上,当基于某个类(比方coblist)声明集合时,新类不仅继承其基类的成员,还声明假设干其他的类型平安成员函数和运算符,这些函数和运算符通过封装对基类成员的调用来提供类型平安。这些封装管理所有必需的类型转换。例如:复制代码
ctypedptrarraymyarray;ctypedptrlistmylist;
第一个例如声明了从cobarray派生的类型指针数组myarray。该数组存储并返回指向cperson对象(其中cperson是从cobject派生的类)的指针。可以调用任何cobarray成员函数,或者可以调用新的类型平安函数getat和elementat或使用类型平安运算符。
第二个例如声明了从cptrlist派生的类型指针列表mylist。该列表存储并返回指向my_struct对象的指针。基于cptrlist的类用于存储指向不是派生自cobject的对象的指针。ctypedptrlist有假设干个类型平安成员函数:gethead、gettail、removehead、removetail、getnext、getprev和getat。
类型指针映射的用法
类型指针映射类ctypedptrmap采用三个参数:base_class、key和value。base_class参数指定从中派生新类的基类:cmapptrtoword、cmapptrtoptr、cmapstringtoptr、cmapwordtoptr、cmapstringtoob等。key类似于cmap中的key:指定用于查找的键的类型。value类似于cmap中的value:指定存储在映射中的对象类型。例如:复制代码
ctypedptrmapmyptrmap;ctypedptrmapmyobjectmap;
第一个例如是基于cmapptrtoptr的映射,它使用映射到指向my_struct的指针的cstring键。可通过调用类型平安的lookup成员函数来查找存储的指针。可以使用运算符查找存储的指针;如果没有找到,那么添加它。并且可以使用类型平安的getnextassoc函数迭代映射。也可以调用cmapptrtoptr类的其他成员函数。
第二个例如是基于cmapstringtoob的映射,它使用映射到指向cmyobject对象的存储指针的字符串键。可以使用在前面的段落中描述的同一类型平安成员,或调用cmapstringtoob类的成员。
注意如果为value参数指定class或struct类型,而不是指定指向该类型的指针或对该类型的引用,那么类或结构必须具有复制构造函数。有关更多信息,请参见如何创立类型平安集合。
cobject类的特性
下面,对三种特性分别描述,并说明程序员在派生类中支持这些特性的方法。
1.对运行时类信息的支持
该特性用于在运行时确定一个对象是否属于一特定类(是该类的实例),或者从一个特定类派生来的。cobject提供iskindof函数来实现这个功能。
从cobject派生的类要具有这样的特性,需要:
定义该类时,在类说明中使用declare_dynamic(classnmae)宏;
。在类的实现文件中使用implement_dynamic(classname,baseclass)宏。
。
1.对动态创立的支持
前面提到了动态创立的概念,就是运行时创立指定类的实例。在mfc中大量使用,如前所述框架窗口对象、视对象,还有文档对象都需要由文档模板类(cdoctemplate)对象来动态的创立。从cobject派生的类要具有动态创立的功能,需要:
定义该类时,在类说明中使用declare_dyncreate(classnmae)宏;。定义一个不带参数的构造函数(默认构造函数);
。在类的实现文件中使用implement_dyncreate(classname,baseclass)宏;
。
学习模板和集合类的建议.doc免费为全国范文类知名网站,下载全文稍作修改便可使用,即刻完成写稿任务。
支付6元已有11人下载
下载这篇word文档
学习模板和集合类的建议(2).doc免费为全国范文类知名网站,下载全文稍作修改便可使用,即刻完成写稿任务。
支付6元已有11人下载
下载这篇word文档
第7页 共7页