正文

MFC集合类学习笔记(1)2007-01-10 20:50:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/yuqiexing/22457.html

分享到:

实际上集合类就是数据结构中的顺序存储结构和链表存储结构。它的优点就是建立这样的存储结构简单,并且把相关的操作集中成函数,方便用户的调用。比如顺序存储用到数组,如果要在数组中的固定位置添加一项,普通的方法就是要用一个for循环,有点烦琐。而在集合类中只要用一个add函数就完成了,相对简单一点。

 

数据结构是软件设计中的一个重要组成部分。因此我们有必要搞清楚集合类的相关问题。

 

13种类型

集合类中有3种大的类型:

(1)         Array 数组,可以动态的改变大小,有索引值和最大下标等。

(2)         List:双向链表,无索引,链表有头尾,插入元素要比数组快。

(3)         Map:是一种映射,俗名“字典”,是一种关联式数组。(在此不做讨论)

 

2.各自特点:

类型

是否有序

插入元素速度

搜索元素速度

索引

Array

List

 

3MFC中的集合类

是否使用模板

是否支持串行化

是否支持倾印

CArray

CTypedPtrArray

可能

CByteArray

CDWordArray

CObArray

CPtrArray

CStringArray

CWordArray

CUIntArray

CList

CTypedPtrList

可能

COblist

CStringList

 

 

4.几点说明

(1) 有些集合类是从c++模板支持的,如CArrayCList,使用时必须指出所要收集对象的类型,比如intcharCPoint等,可以参考一下c++模板的知识。

 

2)在表中有2个“可能“,因为CTypedPtrArray,CTypedPtrList这些类在使用时要指定基类,如果基类可以串行化,那么它就可以串行化。

 

3)在深入浅出MFC中,作者说CUIntArray是可以串行化的,但我在做项目时证明它是不可以串行化的,希望读者注意

如一个对象类:

        Void  CStudent::SerializeCArchive &ar

 {

                   ……

        m_array.Serialize(ar);//这里m_arrayCUIntArray的对象

     }

可是运行后发现并没有成功。因此只好采用for循环:

         Void  CStudent::SerializeCArchive &ar

   {

                   If(ar.IsStoring( ))//存储

                   {

                            ar<<m_array.GetSize();

                            for(int i=0;i<m_array.GetSize();i++)

               ar<<m_array.GetAt(i)

       }

       …..//读取略

}

 

阅读(6154) | 评论(3)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册