CTypedPtrList类是个模板类,一般在软件开发中用到的时候比较多,它的作用就是类似一个链表,下面是这个类的原型
template < class BASE_CLASS, class TYPE>
class CTypedPtrList : public BASE_CLASS
第一个参数说明是列表的基类,这里必须是个指针列表类(Coblist或者CPtrlist,自己觉得用其他的列表类也可以,只要是指针列表类)
第二个参数指在列表类中所存放的类型
为什么不直接用Coblist或者CPtrlist呢?这是有原因的,因为CTypedPtrList类又进一步的封装了CPtrlist,并且为消除了一些错误,还提供了一些类型的强制转化,所以说一般都是用CTypePtrList这个模板类,你也不用担心这个类封装以后会变的速度慢,因为CTypedPtrList类封装以后里面的函数是内联的,如果你想真正想掌握这个模板类还是需要看看他提供的成员函数,下面是它的成员函数
构造
构造一个空的void指针列表 |
首/尾访问
返回列表(不能为空)的头元素 | |
返回列表(不能为空)的尾元素 |
操作
移走列表的头元素 | |
移走列表的尾元素 | |
将一个元素(或另一列表中的所有元素)增加到列表头(成为新的列表头) | |
将一个元素(或另一列表中的所有元素)增加到列表尾(成为新的列表尾) | |
从此列表中移走所有元素 |
重复
返回列表头元素的位置 | |
返回列表尾元素的位置 | |
获取用于重复的下一个元素 | |
获取用于重复的上一个元素 |
获取/修改
获取在给定位置的元素 | |
设置在给定位置的元素 | |
从此列表中移走给定位置的元素 |
插入
在一个给定位置之前插入一个新元素 | |
在一个给定位置之后插入一个新元素 |
搜索
获取一个由指针值指定的元素的位置 | |
获取由一个索引(从零开始)指定的元素的位置 |
状态
返回此列表中的元素数目 | |
测试列表是否为空(无元素) |
只要你充分能用上上面的函数我想你的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对象被删除时,或者是当它的元素被删除时,只有指针被删除了,而它们所引用的项并没有被删除。这个大家必须自己琢磨一下,自己思考比我说效果还好当然了我这里只是说明了,这个模板的几个用法,其实还是有很多用法,因为他的成员函数也是很多的,你可以根据自己的想法去实现就可以,还有就是不管你怎么弄,其实还是里面的成员函数,你自己只要多看几点这个模板的成员函数我想对你不是很难.