MFC CList使用
转自: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
1.CList说明 类CList支持可按顺序或按值访问的非唯一对象的有序列表.CList 列表与双链接列表行为相似. template < class TYPE, class ARG_TYPE ...
- MFC链表CList类
一.类的概要和头文件 1. CList类:产生不定类型的列表,是一个集合类,也是一个双向链表类,是一个类模板. 2. #include "Afxtempl.h" //包含头文件 ...
- MFC 的CList,CPtrList,CObList,CStringList 的用法
一直在编程中使用stl进行编程,但是最近感觉微软提供的模版类也是很好,出错机率更低,建议在mfc的工程使用.相关介绍如下,参照msdn搞清接口即可使用 CList是通用型的列表类,你可以存放指定的数据 ...
- MFC 的CList,CPtrList,CObList,CStringList 的用法之CList
CList 类 在程序设计当中经常会出现使用同种数据结构的不同实例的情况.例如:在一个 程序中可以使用多个队列.树.图等结构来组织数据.同种结构的不同实例,也 许只在数据元素的类型或数量上略有差异,如 ...
- MFC基本类库——链表类CList
一.链表基本概念 链表是一种物理存储单元上非连续.非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成.每个 ...
- 第三部分:MFC中控件的样式
2019独角兽企业重金招聘Python工程师标准>>> 第三部分:MFC中控件的样式 控件是用来建立Windows应用程序用户界面的用户界面对象.你所见到的大部分Windows应用程 ...
- MFC常用类、成员函数、数组类、Cstring类、CTime类、CPoint类
MFC数组类CByteArray: CDWordArray: CPtrArray: CUIntArray: CWordArray: CStringArray: 常用成员函数 1.int Add( AR ...
- 【MFC】MFC消息处理和映射
00. 目录 文章目录 00. 目录 01. 概述 02. 框架中的消息和命令 2.1 消息 2.2 消息处理程序 2.3 消息类别 2.4 映射消息 2.5 命令ID 2.6 标准命令 2.7 命令 ...
- C 的CList,CPtrList,CObList,CStringList 用法之CPtrList
一直在编程中使用stl进行编程,但是最近感觉微软提供的模版类也是很好,出错机率更低,建议在mfc的工程使用. 相关介绍如下,参照msdn搞清接口即可使用 CList是通用型的列表类,你可以存放指定的数 ...
最新文章
- 【Redis】配置远程连接
- 华科博士 201 万,西安交大本科生 100 万!华为「天才少年」校招薪资曝光
- Boost:构造一个流对象,任何发送到此流将标准输出
- python怎么显示汉字_mac在matplotlib中显示中文的操作方法
- 巧用计算机辅助培智生,计算机辅助设计答案
- Oddz将于3月18日在Polkastarter进行IDO,此前已完成260万美元战略融资
- 移动端触屏滑动touches使用
- jumpserver 跳板机
- 百兆以太网口通信速率_千兆以太网的传输速度
- Java思维导图(七)
- 面试java回答优缺点_面试时被问“你有什么优缺点”应该怎么回答?
- 施耐德 m340 编程手册_M251M340在自动化立体仓储的应用
- IOS 检测摇一摇动作的实现方式
- Jenkins集成GitHub
- 1833 雪糕的最大数量(排序)
- 自媒体运营中千万不能做的四件事情
- Win10 网络显示感叹号或小地球,能联网却提示无法连接到Internet 的解决方法
- 2021.5.5笔记 多态
- 完全BIOS优化(转)
- 刘谦2010春晚魔术解密
热门文章
- 从一个叫灵异拼图(the forgotten) 影片看东西方文化的差异
- 在oracle中imp是什么意思,Oracle中的Imp和Expt用法
- 今天,我宣布了新 Logo
- 二叉树的先序创建、前中后序遍历(递归)C++
- 【Java】Java安装与配置指南
- C# -> (Cshape)笔记
- PM的基石(1) - PMP (国际项目管理师)
- 打开window桌面文件夹路径的方法
- 学习OpenCV3:Cmake+MinGW编译OpenCV
- 【picoCTF2022】Misc部分