MFC链表CList类
一、类的概要和头文件
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类相关推荐
- MFC 的CList,CPtrList,CObList,CStringList 的用法之CList
CList 类 在程序设计当中经常会出现使用同种数据结构的不同实例的情况.例如:在一个 程序中可以使用多个队列.树.图等结构来组织数据.同种结构的不同实例,也 许只在数据元素的类型或数量上略有差异,如 ...
- MFC 的CList,CPtrList,CObList,CStringList 的用法
一直在编程中使用stl进行编程,但是最近感觉微软提供的模版类也是很好,出错机率更低,建议在mfc的工程使用.相关介绍如下,参照msdn搞清接口即可使用 CList是通用型的列表类,你可以存放指定的数据 ...
- 使用MFC里的类的方法
在其它工程中,如Win32 Console Application,使用MFC里的类的方法: #define _AFXDLL #include <afx.h> 加上就可以使用了.有些类可能 ...
- VC++ 利用MFC的CWindowDC类实现画线功能 在桌面窗口中画线 绘制彩色线条 CPen nPenStyle nWidth crColor
目录 利用MFC的CWindowDC类实现画线功能 在桌面窗口中画线 绘制彩色线条 CPen nPenStyle nWidth crColor 接上:VC++ 绘制线条 OnLButtonDown函数 ...
- VC++ 绘制线条 OnLButtonDown函数(DrawView.cpp) 利用SDK全局函数实现画线功能 利用MFC的CDC类实现画线功能 利用MFC的CClientDC类实现画线功能
目录 绘制线条 OnLButtonDown函数(DrawView.cpp) 利用SDK全局函数实现画线功能 利用MFC的CDC类实现画线功能 利用MFC的CClientDC类实现画线功能 接上:VC+ ...
- MFC的COleDateTime类使用
MFC的COleDateTime类使用 经常在软件开发中用到计算执行某个功能的耗时,有必要深入研究下COleDateTime类,以备不时之需.闲话少叙,书归正传,下面我们就一起来看看,该如何使用这个类 ...
- 单链表模板类c++实现
1.题目描述 实现课本中的带附加头结点的单链表模板类,完成如下功能: 定义链表节点的结构体类型,构造函数和析构函数,单链表的输入输出 引用型操作:getData,Locate ,Search,Leng ...
- 【无标题】c++ MFC图像处理CImage类常用操作代码
原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/9598974.html 我看了一下发现关于c++下的CImage图像处理类 的图像处理相关的介绍 ...
- 【MFC】CCriticalSection类在Release编译下调用Lock函数会报0xC0000008错误
[MFC]CCriticalSection类在Release编译下调用Lock函数会报错0xC0000008 问题描述 方法一 CRITICAL_SECTION代替CCriticalSection 方 ...
最新文章
- openssl算法 —— 利用openssl进行BASE64编码解码、md5/sha1摘要、AES/DES3加密解密
- leetcode jump game ii
- 防抖debounce和节流throttle
- 局域网远程维护工具DAMEWARE NT 需要开通IPC和ADMIN通道
- python清空list_python怎么清空list
- 程序员-人事面试题、包含缺点、优点、自我介绍、范文
- 论文笔记:Securing Data With Blockchain and AI
- 非度量多维排列 NMDS (Non-metric multidimensional scaling)分析
- mysql blob类型图片输出到前端
- Pillow和OpenCV转numpy数组
- 世界之窗浏览器 java_浏览器部分JavaScript失效如何解决
- 鸿蒙申请入口联系人邮箱格式不对,为什么appid输入邮箱地址不对
- “华为“和“荣耀”区别日益明显,荣耀传递潮流价值观
- 【中科大软院】还香不香?20软院考研四千字复盘
- jQuery 的 Sizzle 选择器
- 3D建模学习?选次世代场景还是次世代角色?
- 构建静态页面 之 [ 浮动 ]
- 常用数学符号的 LaTeX 表示方法
- 【数学】【裂项相消】Integration-牛客
- 【数据结构与算法】之动态规划经典问题