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,但返回列表中前一个位置引用

原文地址:https://www.cnblogs.com/xpwzq/p/3368636.html