MFC CList使用

转载 2012年03月27日 17:05:25

转自:http://blog.sina.com.cn/s/blog_5cda82f40100aw58.html


一、类的概要和头文件

1. CList类:产生不定类型的列表,是一个集合类,也是一个双向链表类,是一个类模板。

2. #include "Afxtempl.h"   //包含头文件

3. CList的构造函数,举例如下:

CList<CString ,CString&> list;  //链表对象1

CList<CString,CString> list2;   //链表对象2

        这里的第一个参数CString是实例化的类型,第二个参数是类的成员函数的参数的调用形式,通常是类型引用,当然也可以是对象,而不是引用。对于大结构,还是使用引用吧。具体原因不用再重复了吧。

二、CList迭代器

        迭代器是近年在链表使用中的一个常用技术。如果大家学过java,就会知道,在java中,会有专门的一个迭代器类,这个迭代器类用来访问Collect中的数据元素。C++中STL中也有关于迭代器的描述,可以参考具体文章。在mfc中,在CList中,定义了几个迭代器的函数。他们方便了我们去访问数据元素。迭代器函数如下:

1. 成员函数:

 

GetHeadPosition Returns the position of the head element of the list.
GetTailPosition Returns the position of the tail element of the list.
GetNext Gets the next element for iterating.
GetPrev Gets the previous element for iterating.

 

     以上4个函数都是迭代器函数,前两个返回的是POSITION,他是MFC中定义的一种专门访问Collect类的一个数据类型,用它来表示元素位置。

2. 使用迭代器进行遍历双链表。

CList<CString ,CString&> list;

CString str1="hello";

CString str2="world";

CString str3="my";

CString str4="life";

list.AddTail(str1);

list.AddTail(str2);

list.AddTail(str3);

list.AddTail(str4);

POSITION pos = list.GetHeadPosition();

while(pos!=NULL)

{

        pDC->TextOut(200,200,GetNext( POSITION& rPosition ) );//假设代码是在View类中的OnDraw函数里

}

三、CList的常用函数

1. 标题/末尾访问
GetHead 返回列表的标题元素(不能为空)
GetTail 返回列表的末尾元素(不能为空)

2. 操作
RemoveHead 从列表标题中移走元素
RemoveTail 从列表末尾移走元素
AddHead 添加一个元素(或另一个列表的所有元素)到列表标题(生成新的标题)
AddTail 添加一个元素(或另一个列表的所有元素)到列表尾部(生成新的尾部)
RemoveAll 从列表中移走所有元素

3. 循环
GetHeadPosition 返回列表标题元素的位置
GetTailPosition 返回列表尾部元素的位置
GetNext 获取用于遍历下一个元素
GetPrev 获取用于遍历的前一个元素

4. 获取/修改
GetAt 在指定位置上获得元素
SetAt 在指定位置上设置元素
RemoveAt 从列表中删除一个由位置确定的元素

5. 插入
InsertBefore 在指定位置前插入一个新的元素
InsertAfter 在指定位置后插入一个新的元素

6. 查找
Find 获得由指针值确定的元素位置
FindIndex 获得由基于零的索引指定的元素位置

7. 状态
GetCount 返回此列表中的元素数
IsEmpty 检测空列表的情况(没有元素)

四、CList的序列化

CList是一个继承了CObject的类,并且已经实现了Serialize(CArchive& ar)的函数,所以,对CList进行串行序列化不需要的。如果在CList类在CDocument定义了其对象list,那么在文档的Serialize(CArchive& ar)只需作如下修改:

void CDdfDoc::Serialize(CArchive& ar)

{

if (ar.IsStoring())

{

    // TODO: add storing code here

    list.Serialize(ar);

}

else

{

    // TODO: add loading code here

list.Serialize(ar);

}

}

这样,就实现了文档的串行化,如果使用mfc生成的框架,那么我们就可以直接将这个list的数据保存到文件,并能读取了。

相关文章推荐

MFC中CList类使用注意

初学mfc者,往往对CList等mfc的Collect类的使用感到迷惑,在使用中经常会遇到许多问题,导致对vc中的Collect类的使用产生了惧怕。以下,就个人经历而言,告诉大家如何使用CList。C...

CList成员的使用

使用时 要 #include   Construction CList Constructs an empty ordered list. 建立一个链表 example...

MFC中CList类使用方法

CList是一个双向链表类。 1:Clist类定义在Afxtempl.h 头文件中,因此在使用该类时,需要加这个头文件名。 2、理解CList的声明和构造方法 CList的声明如下: temp...

VC MFC中CList成员的使用

MSDN:使用时 要#include  ConstructionCListConstructs an empty ordered list.建立一个链表example:CList myList;//建...

VC中CList用法

初学mfc者,往往对CList等mfc的Collect类的使用感到迷惑,在使用中经常会遇到许多问题,导致对vc中的Collect类的使用产生了惧怕。以下,就个人经历而言,告诉大家如何使用CList。 ...
  • HiRuyue
  • HiRuyue
  • 2013年07月31日 17:26
  • 1180

CList的使用

初学mfc者,往往对CList等mfc的Collect类的使用感到迷惑,在使用中经常会遇到许多问题,导致对vc中的Collect类的使用产生了惧怕。以下,就个人经历而言,告诉大家如何使用CList。C...

MFC链表CList类

一、类的概要和头文件 1. CList类:产生不定类型的列表,是一个集合类,也是一个双向链表类,是一个类模板。 2. #include "Afxtempl.h"   //包含头文件 ...

MFC容器类CArray,CList

我们知道有各种各样的数据结构,啥栈,队列,树之类的.不过其实这些用的都非常少,用的最多的是线性表.平常我们用的数组最是典型的线性表.我们可以像int [] arrp这样简单的定义一个数组.不过这是固定...

MFC中CList类使用注意

MFC中CList类使用注意     初学mfc者,往往对CList等mfc的Collect类的使用感到迷惑,在使用中经常会遇到许多问题,导致对vc中的 Collect类的使用产生了惧怕。以下,就...

CList的使用

  • 2014年07月16日 08:30
  • 2.26MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MFC CList使用
举报原因:
原因补充:

(最多只允许输入30个字)