CList是一个双向链表类。CList的优势是快速灵活的插入和删除。但是在访问元素的时候,会多一个N的时间复杂度。在元素很多的时候,建议把数据分段存储。
1、包含头文件Afxtempl.h
在你要使用CList链表类的地方,使用#include <Afxtempl.h>,或者直接在stdafx.h中包含这句。
2、理解CList的声明和构造方法
CList的声明如下:
template< class TYPE, class ARG_TYPE >
class CList : public CObject
CList的声明有2种方式,决定的是参数的使用是引用,还是复制。
例如:
CList<CString ,CString&> list1; //注意引用符号的位置是在类型后面。<类型&>
CList<CString,CString> list2;
第一个参数,表示的是链表的元素的数据类型,这里类似一个声明,声明你使用的链表中的数据类型是什么。
第二个参数,分2种形式,一种是引用形式,一种是复制形式,那么这个引用和复制,体现的作用在哪里呢?其实,这个引用和复制,只是体现在元素的添加,查找上面。比如我们往刚才声明的这个链表list1中添加元素。
CList<CString ,CString&> list1; //
CString str = "abc";
list1.AddTail(str); //str是以引用的方式,添加到list1中的,类似声明一个函数 void fun(CString &a);
再看另外一个中声明方式:
CList<CString,CString> list2;//
CString str = "abc";
list2.AddTail(s