转自: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使用相关推荐

  1. [MFC] CList

    1.CList说明 类CList支持可按顺序或按值访问的非唯一对象的有序列表.CList 列表与双链接列表行为相似. template < class TYPE, class ARG_TYPE ...

  2. MFC链表CList类

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

  3. MFC 的CList,CPtrList,CObList,CStringList 的用法

    一直在编程中使用stl进行编程,但是最近感觉微软提供的模版类也是很好,出错机率更低,建议在mfc的工程使用.相关介绍如下,参照msdn搞清接口即可使用 CList是通用型的列表类,你可以存放指定的数据 ...

  4. MFC 的CList,CPtrList,CObList,CStringList 的用法之CList

    CList 类 在程序设计当中经常会出现使用同种数据结构的不同实例的情况.例如:在一个 程序中可以使用多个队列.树.图等结构来组织数据.同种结构的不同实例,也 许只在数据元素的类型或数量上略有差异,如 ...

  5. MFC基本类库——链表类CList

    一.链表基本概念 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成.每个 ...

  6. 第三部分:MFC中控件的样式

    2019独角兽企业重金招聘Python工程师标准>>> 第三部分:MFC中控件的样式 控件是用来建立Windows应用程序用户界面的用户界面对象.你所见到的大部分Windows应用程 ...

  7. MFC常用类、成员函数、数组类、Cstring类、CTime类、CPoint类

    MFC数组类CByteArray: CDWordArray: CPtrArray: CUIntArray: CWordArray: CStringArray: 常用成员函数 1.int Add( AR ...

  8. 【MFC】MFC消息处理和映射

    00. 目录 文章目录 00. 目录 01. 概述 02. 框架中的消息和命令 2.1 消息 2.2 消息处理程序 2.3 消息类别 2.4 映射消息 2.5 命令ID 2.6 标准命令 2.7 命令 ...

  9. C 的CList,CPtrList,CObList,CStringList 用法之CPtrList

    一直在编程中使用stl进行编程,但是最近感觉微软提供的模版类也是很好,出错机率更低,建议在mfc的工程使用. 相关介绍如下,参照msdn搞清接口即可使用 CList是通用型的列表类,你可以存放指定的数 ...

最新文章

  1. 【Redis】配置远程连接
  2. 华科博士 201 万,西安交大本科生 100 万!华为「天才少年」校招薪资曝光
  3. Boost:构造一个流对象,任何发送到此流将标准输出
  4. python怎么显示汉字_mac在matplotlib中显示中文的操作方法
  5. 巧用计算机辅助培智生,计算机辅助设计答案
  6. Oddz将于3月18日在Polkastarter进行IDO,此前已完成260万美元战略融资
  7. 移动端触屏滑动touches使用
  8. jumpserver 跳板机
  9. 百兆以太网口通信速率_千兆以太网的传输速度
  10. Java思维导图(七)
  11. 面试java回答优缺点_面试时被问“你有什么优缺点”应该怎么回答?
  12. 施耐德 m340 编程手册_M251M340在自动化立体仓储的应用
  13. IOS 检测摇一摇动作的实现方式
  14. Jenkins集成GitHub
  15. 1833 雪糕的最大数量(排序)
  16. 自媒体运营中千万不能做的四件事情
  17. Win10 网络显示感叹号或小地球,能联网却提示无法连接到Internet 的解决方法
  18. 2021.5.5笔记 多态
  19. 完全BIOS优化(转)
  20. 刘谦2010春晚魔术解密

热门文章

  1. 从一个叫灵异拼图(the forgotten) 影片看东西方文化的差异
  2. 在oracle中imp是什么意思,Oracle中的Imp和Expt用法
  3. 今天,我宣布了新 Logo
  4. 二叉树的先序创建、前中后序遍历(递归)C++
  5. 【Java】Java安装与配置指南
  6. C# -> (Cshape)笔记
  7. PM的基石(1) - PMP (国际项目管理师)
  8. 打开window桌面文件夹路径的方法
  9. 学习OpenCV3:Cmake+MinGW编译OpenCV
  10. 【picoCTF2022】Misc部分