MFC中动态数组CArray的使用.pdfVIP

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
MFC中动态数组CArray的使用

MFC 中动态数组CArray 的使用 数组——这个C 语言中的怪物,自从被直接继承到C++ 中,便让无数有识之士们前赴后 继、绞尽脑汁,试图寻找一种可以动态增长的替代数据类型。当然,最著名的,应该就是 vector 向量。但是,它的数据定义极其复杂,还有迭代的出现,几乎彻底摧毁了它仅存的一 点优势。所以,引入MFC 之后,微软斩钉截铁地抛弃了标准C++的模板库。 CArray 是 MFC 中非常重要的几个类模板之一,其他的还有 CList、CMap 等,但它们的 定义略微有点晦涩。以我自己的经验,在MFC 中使用CArray 定义动态数组是非常方便的。 在MSDN 中,CArray 的声明如下: template class TYPE, class ARG_TYPE class CArray : public CObject 参数 TYPE 模板参数,指定存储在数组中对象的类型。TYPE 是CArray 返回的参数类型。 ARG_TYPE 模板参数,指定用来访问存储在数组中对象的变量类型,通常是TYPE 的引用。ARG_TYPE 是传递给CArray 的参数类型。 备注 CArray 类支持与C 中相似的数组,但是必要时可以动态收缩和增长。数组索引总是从0 开始。你可以决定是固定数组上界还是允许当添加元素超过当前边界时扩展数组。内存被连 续地分配到上界,即使一些元素可能为空。和 C 中数组一样,CArray 索引元素的访问时间 是不变的,与数组大小无关。 提示 在使用一个数组之前,使用 SetSize 建立它的大小和为它分配内存。如果不使用 SetSize,则为数组添加元素就会引起频繁地重新分配和拷贝。频繁地重新分配和拷贝不但没 有效率,而且会导致内存碎片。 如果需要一堆数组中的个别数据,必须设置CDumpContext 对象的深度为1 或更大。 此类的某些成员函数调用全局帮助函数,它必须为 CArray 的大多数使用而定制。请参 阅宏和全局量章节中的Collection Class Helpers 。 当从一个CArray 对象中移去元素时,帮助函数DestructElements 被调用。当添加元素时, 帮助函数ConstructElements 被调用。 数组类的派生与列表的派生类似。 有关使用CArray 类的更多信息,请参考Visual C++ Programmers Guide 中的论文集。 #include afxtempl.h 看到上面这么一大段文字是不是觉得有点头晕?MSDN 就是这样的,不然怎么能体现出 它的“权威”呢。其实不要觉得它很复杂,使用 CArray 类构造动态数组非常简单。首先, 你需要包含头文件Afxtempl.h ,然后就可以定义自己的动态数组了。例如定义一个int 型和 CPoint 型的动态数组: #include afxtempl.h CArray int, int num; CArray CPoint, CPoint pt; // 也可以这样:CArray CPoint, CPoint pt; 现在,我们构造了两个动态数组,按照MSDN 的提示,我们要使用SetSize 函数建立它 的大小和分配内存。(但其实这一步可以省略,而且我自己就是这么做的,虽然这不符合一 个规范程序员的风格。)SetSize 的函数原型是: void SetSize( int nNewSize, int nGrowBy = -1 ); 这个函数在 MSDN 中也有详细的说明,我就不再去翻译了。其中第一个参数指定数组 大小,即数组中元素个数(必需大于或等于0 )。对于第二个参数,MSDN 中有这样一句话: 如果使用了默认值,MFC 以一种在大多数情况下能够避免内存碎片和最高效的方式去分配 内存。既然人家 MSDN 都这么说了,那我们第二个参数就使用它的默认值了。如果要加上 这一步的话,可以这么写(我们先不写): num.SetSize(40); // 其实大小设为多少没有关系,只要是你认为最合适的就行了 pt.SetSize(10); // 一般地,设得大些可以避免内存碎片和提高效率,但所需空间越大 现在我们可以使用Add 函数向数组中添加一个元素,也可以用GetAt 函数来获得一个元 素。它们的

您可能关注的文档

文档评论(0)

yaobanwd + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档