CList类
CList简介
CList是一个模板类,其实就是一个双向链表。支持多个对象的顺序列表,可以同时顺序或者值访问对象成员。
参数:
TYPE:要存储的对象类型
ARG_TYPE:在列表中用于引用对象的类型。
使用CList模板类注意事项:
1、头文件名不可少
Clist类定义在Afxtempl.h 头文件中,因此在使用该类时,需要加这个头文件名。
2、理解CList的声明和构造方法
CList的声明如下:
template< class TYPE, class ARG_TYPE >class CList : public CObject
由此,我们知道CList是一个模版类,那么他的两个class是什么意思呢?
下面看一个例子:
CList<CString ,CString&> list;//链表对象1
CList<CString,CString> list2;//链表对象2
这里的第一个参数CString是实例化的类型,第二个参数是类的成员函数的参数的调用形式,通常是类型 引用,当然也可以是对象,而不是引用。
3、使用CList的迭代器
迭代器是近年在链表使用中的一个常用技术。如果大家学过java,就会知道,在java中,会有专门的一个迭代 器类,这个迭代器类用来访问Collect中的数据元素。在 在CList中,定义了几个迭代器的函数。他们方便了我们去访问数据元素。
GetHeadPosition / GetTailPosition / GetNext / GetPrev
(1)GetHeadPosition()
声明:POSITION GetHeadPosition( ) const;
返回值:返回列表中头元素的位置。如果列表为空返回NULL;返回值POSITION可用于迭代或者对象指针的检索。
Example
// Define myList.
CList<CString,CString&> myList;
// Add an element to the front of the list.
myList.AddHead(CString("ABC"));
// Verify the element at the head position
// is the one added.
POSITION pos = myList.GetHeadPosition();
ASSERT(CString("ABC") == myList.GetAt(pos));
(2)GetTailPosition()
POSITION GetTailPosition( ) const;
获得尾部元素的位置,如果列表为空,返回NULL。
(3)GetNext()
声明:
TYPE& GetNext( POSITION& rPosition );
TYPE GetNext( POSITION& rPosition ) const;
返回值:
如果列表为常量,返回值为头元素的拷贝。
如果类表不为常量,返回头元素的引用
TYPE
列表中对象类型
rPosition
先前的GetNext,GetHeadPosition函数返回的一个位置值引用,或其他成员函数调用返回的引用。
迭代过程可用此循环
Position = m_list.GetHeadPosition();
do
{
lpConnect = m_list.GetNext(Position);
lpConnect->lpInterface->Draw(hDC);
} while (Position);
(4)GetPrev()
同GetNext,但返回列表中前一个位置引用