CTypedPtrList的具体用法

CTypedPtrList类是个模板类,一般在软件开发中用到的时候比较多,它的作用就是类似一个链表,下面是这个类的原型

  template < class BASE_CLASS, class TYPE>
  class CTypedPtrList : public BASE_CLASS

第一个参数说明是列表的基类,这里必须是个指针列表类(Coblist或者CPtrlist,自己觉得用其他的列表类也可以,只要是指针列表类)

第二个参数指在列表类中所存放的类型

为什么不直接用Coblist或者CPtrlist呢?这是有原因的,因为CTypedPtrList类又进一步的封装了CPtrlist,并且为消除了一些错误,还提供了一些类型的强制转化,所以说一般都是用CTypePtrList这个模板类,你也不用担心这个类封装以后会变的速度慢,因为CTypedPtrList类封装以后里面的函数是内联的,如果你想真正想掌握这个模板类还是需要看看他提供的成员函数,下面是它的成员函数:
构造函数 

CPtrList  构造一个空的void指针列表

GetHead()得到列表的首元素(列表不能不空);

GetTail()得到列表的尾元素(列表不能不空);

操作

重复

RemoveHead

移走列表的头元素

RemoveTail

移走列表的尾元素

AddHead

将一个元素(或另一列表中的所有元素)增加到列表头(成为新的列表头)

AddTail

将一个元素(或另一列表中的所有元素)增加到列表尾(成为新的列表尾)

RemoveAll

从此列表中移走所有元素

获取/修改

GetHeadPosition

返回列表头元素的位置

GetTailPosition

返回列表尾元素的位置

GetNext

获取用于重复的下一个元素

GetPrev

获取用于重复的上一个元素

插入

GetAt

获取在给定位置的元素

SetAt

设置在给定位置的元素

RemoveAt

从此列表中移走给定位置的元素

InsertBefore

在一个给定位置之前插入一个新元素

InsertAfter

在一个给定位置之后插入一个新元素

搜索

Find

获取一个由指针值指定的元素的位置

FindIndex

获取由一个索引(从零开始)指定的元素的位置

状态

GetCount

返回此列表中的元素数目

IsEmpty

测试列表是否为空(无元素)

 

只要你充分能用上上面的函数我想你的CTypedPtrList这个模板类也掌握的很好了,

下面是个例子说明

首先自己定义一个类或者结构体都是可以的,只要你符合标准,下面我来定义一个结构体

                     Typedefstruct _jiegouti

{

       Cstring Name;

       Int          Age;

}Student,*lpstudent //这里只是定义一个结构体

Typedef CtypedPtrList<CPtrList ,lpstudent>CStudent;//这里定义个模板类型

CStudent m_student;//定义这个模板的变量

//下面是往这个列表中模板中添加对象,

lpstudent MyStudent;//定义一个结构体指针变量;

MyStudent =New Student;//在堆中创建一个学生

//为这个学生添加信息

MyStudent->Name=”zl”;

MyStudent->Age=12;

m_student. AddTail(MyStudent);//把这个学生添加模板这个容器中

当然了你还可以查看容器中学生的信息,请看下面代码

Lpstudent lpstudent;

Cstring TempName;

Int TempAge;

POSITION pos=m_student. GetHeadPosition();

//循环遍历找出容器中的所有学生的信息

while (pos!=NULL)

       {

              lpstudent=m_student.GetNext(pos);

              TempName=lpstudent->Name;//得到学生的名字

              TempAge=lpstudent->Age;//得到学生的年龄

       }

当然了你也可以删除这个容器中的学生对象,代码如下

POSITION pos= m_student.GetHeadPosition();

       while(pos!=NULL)

       {

              Lpstudent lpstudent;

              lpstudent=m_HotInfo.GetNext(pos);

              delete[]lpstudent;

       }

注意当一个CTypedPtrList对象被删除时,或者是当它的元素被删除时,只有指针被删除了,而它们所引用的项并没有被删除。这个大家必须自己琢磨一下,自己思考比我说效果还好当然了我这里只是说明了,这个模板的几个用法,其实还是有很多用法,因为他的成员函数也是很多的,你可以根据自己的想法去实现就可以,还有就是不管你怎么弄,其实还是里面的成员函数,你自己只要多看几点这个模板的成员函数我想对你不是很难,

posted on 2013-06-27 21:29  Freshman11  阅读(712)  评论(0编辑  收藏  举报

导航