一、类的概要和头文件

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. 成员函数:

以上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,CPtrList,CObList,CStringList 的用法之CList

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

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

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

  3. 使用MFC里的类的方法

    在其它工程中,如Win32 Console Application,使用MFC里的类的方法: #define _AFXDLL #include <afx.h> 加上就可以使用了.有些类可能 ...

  4. VC++ 利用MFC的CWindowDC类实现画线功能 在桌面窗口中画线 绘制彩色线条 CPen nPenStyle nWidth crColor

    目录 利用MFC的CWindowDC类实现画线功能 在桌面窗口中画线 绘制彩色线条 CPen nPenStyle nWidth crColor 接上:VC++ 绘制线条 OnLButtonDown函数 ...

  5. VC++ 绘制线条 OnLButtonDown函数(DrawView.cpp) 利用SDK全局函数实现画线功能 利用MFC的CDC类实现画线功能 利用MFC的CClientDC类实现画线功能

    目录 绘制线条 OnLButtonDown函数(DrawView.cpp) 利用SDK全局函数实现画线功能 利用MFC的CDC类实现画线功能 利用MFC的CClientDC类实现画线功能 接上:VC+ ...

  6. MFC的COleDateTime类使用

    MFC的COleDateTime类使用 经常在软件开发中用到计算执行某个功能的耗时,有必要深入研究下COleDateTime类,以备不时之需.闲话少叙,书归正传,下面我们就一起来看看,该如何使用这个类 ...

  7. 单链表模板类c++实现

    1.题目描述 实现课本中的带附加头结点的单链表模板类,完成如下功能: 定义链表节点的结构体类型,构造函数和析构函数,单链表的输入输出 引用型操作:getData,Locate ,Search,Leng ...

  8. 【无标题】c++ MFC图像处理CImage类常用操作代码

    原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/9598974.html 我看了一下发现关于c++下的CImage图像处理类 的图像处理相关的介绍 ...

  9. 【MFC】CCriticalSection类在Release编译下调用Lock函数会报0xC0000008错误

    [MFC]CCriticalSection类在Release编译下调用Lock函数会报错0xC0000008 问题描述 方法一 CRITICAL_SECTION代替CCriticalSection 方 ...

最新文章

  1. openssl算法 —— 利用openssl进行BASE64编码解码、md5/sha1摘要、AES/DES3加密解密
  2. leetcode jump game ii
  3. 防抖debounce和节流throttle
  4. 局域网远程维护工具DAMEWARE NT 需要开通IPC和ADMIN通道
  5. python清空list_python怎么清空list
  6. 程序员-人事面试题、包含缺点、优点、自我介绍、范文
  7. 论文笔记:Securing Data With Blockchain and AI
  8. 非度量多维排列 NMDS (Non-metric multidimensional scaling)分析
  9. mysql blob类型图片输出到前端
  10. Pillow和OpenCV转numpy数组
  11. 世界之窗浏览器 java_浏览器部分JavaScript失效如何解决
  12. 鸿蒙申请入口联系人邮箱格式不对,为什么appid输入邮箱地址不对
  13. “华为“和“荣耀”区别日益明显,荣耀传递潮流价值观
  14. 【中科大软院】还香不香?20软院考研四千字复盘
  15. jQuery 的 Sizzle 选择器
  16. 3D建模学习?选次世代场景还是次世代角色?
  17. 构建静态页面 之 [ 浮动 ]
  18. 常用数学符号的 LaTeX 表示方法
  19. 【数学】【裂项相消】Integration-牛客
  20. 【数据结构与算法】之动态规划经典问题

热门文章

  1. Spring :singleton和protype区别
  2. python 加权随机算法_python的random模块及加权随机算法的python实现方法
  3. 欧几里得数据与非欧几里得数据
  4. 浅谈大型互联网的企业入侵检测及防护策略
  5. 计算机管理恢复分区,如何在Windows中擦除恢复分区 | MOS86
  6. Raptor-数字分解
  7. Pycharm中光标变粗 光标进入改写状态
  8. Win7系统更改桌面文件路径的详细步骤
  9. button的setClickable 和 setEnabled 区别
  10. ebs各模块名称及英文缩写