template < class BASE_CLASS, class TYPE >
class CTypedPtrList : public BASE_CLASS
参数: BASE_CLASS 类型指针列表类的基类;必须是一个指针列表类(CObLi st或CPtrList)。
TYPE 保存在基类列表中的元素的类型。
说明:
CTypedPtrList类为类CPtrList的对象提供了一个类型-安全的“包装”。当你使用CTypedPtrList而 不 是CObList或CPtrList的时候,C++类型-检查工具帮助消除由不匹配的指针类型引发的错 误。
另外,CTypedPtrList包装实现了许多在使用CObLis t或CPtrList时要 实现的强制 转换。
因为所有的CTypedPtrList函数都是内联的,所以使用这个模板不会明显地影 响你的代码的大小和速度。
从CObList派生的列表可以是连续的,但是从CPtrList派生的列表 却不能。
当一个CTypedPtrList对象被删除时,或者是当它的元素被删除时,只有指针被删除了,而它们所引用的项并没有被删除。
有关使用CTypedPtrList的更多信息,参见“Visual C++程序员指南”中的文章“集合”和“基于模板的类”。
#include <afxtempl.h>
CTypedPtrList类成员
首/尾元素访问
GetHead 返回列表的头元素(不能是空的)
GetTail 返回列表的尾元素(不能是空的)
操作
RemoveHead 从列表的头部删除元素
RemoveTail 从列表的尾部删除元素
AddHead 将一个元素(或另一个数组中的所有元素)添加到列表的头部(产生一个新的头部)
AddTail 将一个元素(或另一个数组中的所有元素)添加到列表的尾部(产生一个新的尾部)
重复
GetNext 获取用于反复的下一个元素
GetPrev 获取用于反复的前一个元素
获取/修改
GetAt 获取在一个给定位置处的元素
SetAt 设置在一个给定位置处的元素
成员详细解释
CTypedPtrList::GetHead
TYPE& GetHead( );
TYPE GetHead( ) const;
返回值:
如果是通过一个指向const CTypedPtrL ist的指针访问此列表,则GetHead返回一个类型由模板参 数TYPE指定的指针。这使此函数只能被使用在 赋值语句的右 边,这样就保护了列表不被修改。
如果列表被直接访问,或通过一个指向CTypedPtrList的指针访问,则GetHead返回对一个类 型由模板参数TYPE指定的指针的引用。这使得此函数可以使用在赋值语句的任何一边,从而允许该列表可以被修改。
参数: TYPE 指定保存在列表中的元素类型的模板参数。
说明:
此成员函数用来获取代表此列表中的头元素的指针。
在调用GetHead之前,你必须保证该列表不是空的。如果该列表是空的,则Microsoft基础类库的调试版将给出断言。可以使用IsEmpty来检验该列表是否包含元素。
CTypedPtrList::GetTail
TYPE& GetTail( );
TYPE GetTail( ) const;
返回值:
如果是通过一个指向const CTypedPtrList的指针访问此列表,则GetTail返回一个类型由模板参数TYPE指定的指针。这使此函数只能被使用在赋值语句的右边,这样就保护了列表不被修改。
如果列表被直接访问,或通过一个指向CTypedPtrList的指针访问,则GetTail返回对一个类型由模板参数TYPE指定的指针的引用。这使得此函数可以使用在赋值语句的任何一边,从而允许该列表可以被修改。
参数: TYPE 指定保存在列表中的元素类型的模板参数。
说明:
此成员函数用来获取此列表中的头元素。
在调用GetTail之前,你必须保证该列表不是空的。如果列表是空的,则Microsoft基础类库的调试版将给出断言。使用IsEmpty来检验列表是否包含元素。
CTypedPtrList::RemoveHead
TYPE RemoveHead( );
返回值:
返回先前在列表头部的指针。这个指针的类型由模板参数TYPE指定。
参数: TYPE 指定保存在列表中的元素类型的模板参数。
说明:
此成员函数从列表的头部删除元素并返回这个元素。
在调用RemoveHead之前,你必须保证该列表不是空的。如果列表是空的,则Microsoft基础类库的调试版将给出断言。使用IsEmpty来检验列表是否包含元素。
CTypedPtrList::RemoveTail
TYPE RemoveTail( );
返回值:
返回先前在列表尾部的指针。这个指针的类型由模板参数TYPE指定。
参数: TYPE 指定保存在列表中的元素类型的模板参数。
说明:
此成员函数从列表的尾部删除元素并返回这个元素。
在调用RemoveHead之前,你必须保证该列表不是空的。如果列表是空的,则Microsoft基础类库的调试版将给出断言。使用IsEmpty来检验列表是否包含元素。
CTypedPtrList::AddHead
POSITION AddHead( TYPE newElement );
void AddHead( CTypedPtrList <BASE_CLASS, TYPE> *pNewList );
返回值:
第一种版本返回新插入的元素的POSITION值。
参数: TYPE 保存在基类列表中的元素的类型。
newElement 要添加到此列表中的对象指针。可以是NULL值。
BASE_CLASS 此类型指针列表类的基类;必须是一个指针列表类(CObList或CPtrList)。
pNewList 一个指向另一个CTypedPtrList对象的指针。在pNewList中的元素将被添加到列表中。
说明:
此成员函数调用BASE_CLASS::AddHead。
第一种版本将一个新元素添加到列表的头元素之前。
第二种版本将另一个列表中的元素添加到此列表的头元素之前。
CTypedPtrList::AddTail
POSITION AddTail( TYPE newElement );
void AddTail( CTypedPtrList <BASE_CLASS, TYPE> *pNewList );
返回值:第一个版本返回新插入的元素的POSITION值。
参数 TYPE 保存在基类列表中的元素的类型。
newElement 要添加到此列表中的对象指针。可以是NULL值。
BASE_CLASS 此类型指针列表类的基类;必须是一个指针列表类(CObList或CPtrList)。
pNewList 一个指向另一个CTypedPtrList对象的指针。在pNewList中的元素将被添加到列表中。
说明:
此成员函数调用BASE_CLASS::AddTail。
第一种版本将一个新元素添加到列表的尾元素之后。
第二种版本将另一个列表中的元素添加到此列表的尾元素之后。
CTypedPtrList::GetNext
TYPE& GetNext( POSITION& rPosition );
TYPE GetNext( POSITION& rPosition ) const;
返回值:
如果是通过一个指向const CTypedPtrList的指针访问此列表,则GetNext返回一个类型由模板参数TYPE指定的指针。这使此函数只能被使用在赋值语句的右边,这样就保护了列表不被修改。
如果列表被直接访问,或通过一个指向CTypedPtrList的指针访问,则GetNext返回对一个类型由模板参数TYPE指定的指针的引用。这使得此函数可以使用在赋值语句的任何一边,从而允许该列表可以被修改。
参数: TYPE 指定保存在列表中的元素类型的模板参数。
rPosition 一个对先前调用GetNext,GetHeadPosition或其他成员函数返回的POSITION值的引用。
说明:
此成员函数用来获取由rPosition标识的列表元素,然后将rPosition设置为列表中的下一个项的POSITION值。如果你是通过调用GetHeadPosition或CPtrList::Find来建立初始位置的,你就可以使用GetNext来实现一个向前的反复循环。
你必须保证你的POSITION值代表的是列表中的一个有效位置。如果位置是无效的,则Microsoft基础类库的调试版将给出断言。
如果获取的元素是列表中的最后一个,则rPosition被设置为新值NULL。
在一个反复中删除一个元素是有可能的。参见CObList::RemovAt的示例。
CTypedPtrList::GetPrev
TYPE& GetPrev(POSITION& rPosition );
TYPE GetPrev( POSITION& rPosition ) const;
返回值:
如果是通过一个指向const CTypedPtrList的指针访问此列表,则GetPrev返回一个类型由模板参数TYPE指定的指针。这使此函数只能被使用在赋值语句的右边,这样就保护了列表不被修改。
如果列表被直接访问,或通过一个指向CTypedPtrList的指针访问,则GetPrev返回对一个类型由模板参数TYPE指定的指针的引用。这使得此函数可以使用在赋值语句的任何一边,从而允许该列表可以被修改。
参数: TYPE 指定保存在列表中的元素类型的模板参数。
rPosition 一个对先前调用GetPrev或其它成员函数返回的POSITION值的引用。
说明:
此成员函数用来获取由rPosition标识的列表元素,然后将rPosition设置为列表中的下一个项的POSITION值。如果你是通过调用GetTailPosition或Find来建立初始位置的,你就可以使用GetPrev来实现一个反向的反复循环。
你必须保证你的POSITION值代表的是列表中的一个有效位置。如果位置是无效的,则Microsoft基础类库的调试版将给出断言。
如果获取的元素是列表中的第一个,则rPosition被设置为新值NULL。
CTypedPtrList::GetAt
TYPE& GetAt( POSITION position );
TYPE GetAt( POSITION position ) const;
返回值:
如果是通过一个指向const CTypedPtrList的指针访问此列表,则GetAt返回一个类型由模板参数TYPE指定的指针。这使此函数只能被使用在赋值语句的右边,这样就保护了列表不被修改。
如果列表被直接访问,或通过一个指向CTypedPtrList的指针访问,则GetAt返回对一个类型由模板参数TYPE指定的指针的引用。这使得此函数可以使用在赋值语句的任何一边,从而允许该列表可以被修改。
参数: TYPE 指定保存在列表中的元素类型的模板参数。
position 一个由先前调用GetHeadPosition或Find成员函数返回的POSITION值。
说明:
一个类型为POSITION的变量是此列表的一个关键字。它与索引是不一样的,你不能自己处理一个POSITION值。GetAt获取与一个给定位置关联的CObject指针。
你必须确保你的POSITION值表示的是列表中的一个有效位置。如果它是无效的,则Microsoft基础类库的调试版将给出断言。
这个内联函数调用了BASE_CLASS::GetAt。
CTypedPtrList::SetAt
void SetAt( POSITION pos, TYPE newElement );
参数: pos 要被设置的元素的POSITION。
TYPE 保存在基类列表中的元素类型。
newElement 要被写入列表中去的对象指针。
说明:
此成员函数调用BASE_CLASS::SetAt。
一个类型为POSITION的变量是此列表的一个关键字。它与索引是不一样的,你不能自己处理一个POSITION值。SetAt写对象指针到列表中指定位置。
你必须确保你的POSITION值表示的是列表中的一个有效位置。如果它是无效的,则Microsoft基础类库的调试版将给出断言。
更多的细节说明,参见CObList::SetAt。
class CTypedPtrList : public BASE_CLASS
参数: BASE_CLASS 类型指针列表类的基类;必须是一个指针列表类(CObLi st或CPtrList)。
TYPE 保存在基类列表中的元素的类型。
说明:
CTypedPtrList类为类CPtrList的对象提供了一个类型-安全的“包装”。当你使用CTypedPtrList而 不 是CObList或CPtrList的时候,C++类型-检查工具帮助消除由不匹配的指针类型引发的错 误。
另外,CTypedPtrList包装实现了许多在使用CObLis t或CPtrList时要 实现的强制 转换。
因为所有的CTypedPtrList函数都是内联的,所以使用这个模板不会明显地影 响你的代码的大小和速度。
从CObList派生的列表可以是连续的,但是从CPtrList派生的列表 却不能。
当一个CTypedPtrList对象被删除时,或者是当它的元素被删除时,只有指针被删除了,而它们所引用的项并没有被删除。
有关使用CTypedPtrList的更多信息,参见“Visual C++程序员指南”中的文章“集合”和“基于模板的类”。
#include <afxtempl.h>
CTypedPtrList类成员
首/尾元素访问
GetHead 返回列表的头元素(不能是空的)
GetTail 返回列表的尾元素(不能是空的)
操作
RemoveHead 从列表的头部删除元素
RemoveTail 从列表的尾部删除元素
AddHead 将一个元素(或另一个数组中的所有元素)添加到列表的头部(产生一个新的头部)
AddTail 将一个元素(或另一个数组中的所有元素)添加到列表的尾部(产生一个新的尾部)
重复
GetNext 获取用于反复的下一个元素
GetPrev 获取用于反复的前一个元素
获取/修改
GetAt 获取在一个给定位置处的元素
SetAt 设置在一个给定位置处的元素
成员详细解释
CTypedPtrList::GetHead
TYPE& GetHead( );
TYPE GetHead( ) const;
返回值:
如果是通过一个指向const CTypedPtrL ist的指针访问此列表,则GetHead返回一个类型由模板参 数TYPE指定的指针。这使此函数只能被使用在 赋值语句的右 边,这样就保护了列表不被修改。
如果列表被直接访问,或通过一个指向CTypedPtrList的指针访问,则GetHead返回对一个类 型由模板参数TYPE指定的指针的引用。这使得此函数可以使用在赋值语句的任何一边,从而允许该列表可以被修改。
参数: TYPE 指定保存在列表中的元素类型的模板参数。
说明:
此成员函数用来获取代表此列表中的头元素的指针。
在调用GetHead之前,你必须保证该列表不是空的。如果该列表是空的,则Microsoft基础类库的调试版将给出断言。可以使用IsEmpty来检验该列表是否包含元素。
CTypedPtrList::GetTail
TYPE& GetTail( );
TYPE GetTail( ) const;
返回值:
如果是通过一个指向const CTypedPtrList的指针访问此列表,则GetTail返回一个类型由模板参数TYPE指定的指针。这使此函数只能被使用在赋值语句的右边,这样就保护了列表不被修改。
如果列表被直接访问,或通过一个指向CTypedPtrList的指针访问,则GetTail返回对一个类型由模板参数TYPE指定的指针的引用。这使得此函数可以使用在赋值语句的任何一边,从而允许该列表可以被修改。
参数: TYPE 指定保存在列表中的元素类型的模板参数。
说明:
此成员函数用来获取此列表中的头元素。
在调用GetTail之前,你必须保证该列表不是空的。如果列表是空的,则Microsoft基础类库的调试版将给出断言。使用IsEmpty来检验列表是否包含元素。
CTypedPtrList::RemoveHead
TYPE RemoveHead( );
返回值:
返回先前在列表头部的指针。这个指针的类型由模板参数TYPE指定。
参数: TYPE 指定保存在列表中的元素类型的模板参数。
说明:
此成员函数从列表的头部删除元素并返回这个元素。
在调用RemoveHead之前,你必须保证该列表不是空的。如果列表是空的,则Microsoft基础类库的调试版将给出断言。使用IsEmpty来检验列表是否包含元素。
CTypedPtrList::RemoveTail
TYPE RemoveTail( );
返回值:
返回先前在列表尾部的指针。这个指针的类型由模板参数TYPE指定。
参数: TYPE 指定保存在列表中的元素类型的模板参数。
说明:
此成员函数从列表的尾部删除元素并返回这个元素。
在调用RemoveHead之前,你必须保证该列表不是空的。如果列表是空的,则Microsoft基础类库的调试版将给出断言。使用IsEmpty来检验列表是否包含元素。
CTypedPtrList::AddHead
POSITION AddHead( TYPE newElement );
void AddHead( CTypedPtrList <BASE_CLASS, TYPE> *pNewList );
返回值:
第一种版本返回新插入的元素的POSITION值。
参数: TYPE 保存在基类列表中的元素的类型。
newElement 要添加到此列表中的对象指针。可以是NULL值。
BASE_CLASS 此类型指针列表类的基类;必须是一个指针列表类(CObList或CPtrList)。
pNewList 一个指向另一个CTypedPtrList对象的指针。在pNewList中的元素将被添加到列表中。
说明:
此成员函数调用BASE_CLASS::AddHead。
第一种版本将一个新元素添加到列表的头元素之前。
第二种版本将另一个列表中的元素添加到此列表的头元素之前。
CTypedPtrList::AddTail
POSITION AddTail( TYPE newElement );
void AddTail( CTypedPtrList <BASE_CLASS, TYPE> *pNewList );
返回值:第一个版本返回新插入的元素的POSITION值。
参数 TYPE 保存在基类列表中的元素的类型。
newElement 要添加到此列表中的对象指针。可以是NULL值。
BASE_CLASS 此类型指针列表类的基类;必须是一个指针列表类(CObList或CPtrList)。
pNewList 一个指向另一个CTypedPtrList对象的指针。在pNewList中的元素将被添加到列表中。
说明:
此成员函数调用BASE_CLASS::AddTail。
第一种版本将一个新元素添加到列表的尾元素之后。
第二种版本将另一个列表中的元素添加到此列表的尾元素之后。
CTypedPtrList::GetNext
TYPE& GetNext( POSITION& rPosition );
TYPE GetNext( POSITION& rPosition ) const;
返回值:
如果是通过一个指向const CTypedPtrList的指针访问此列表,则GetNext返回一个类型由模板参数TYPE指定的指针。这使此函数只能被使用在赋值语句的右边,这样就保护了列表不被修改。
如果列表被直接访问,或通过一个指向CTypedPtrList的指针访问,则GetNext返回对一个类型由模板参数TYPE指定的指针的引用。这使得此函数可以使用在赋值语句的任何一边,从而允许该列表可以被修改。
参数: TYPE 指定保存在列表中的元素类型的模板参数。
rPosition 一个对先前调用GetNext,GetHeadPosition或其他成员函数返回的POSITION值的引用。
说明:
此成员函数用来获取由rPosition标识的列表元素,然后将rPosition设置为列表中的下一个项的POSITION值。如果你是通过调用GetHeadPosition或CPtrList::Find来建立初始位置的,你就可以使用GetNext来实现一个向前的反复循环。
你必须保证你的POSITION值代表的是列表中的一个有效位置。如果位置是无效的,则Microsoft基础类库的调试版将给出断言。
如果获取的元素是列表中的最后一个,则rPosition被设置为新值NULL。
在一个反复中删除一个元素是有可能的。参见CObList::RemovAt的示例。
CTypedPtrList::GetPrev
TYPE& GetPrev(POSITION& rPosition );
TYPE GetPrev( POSITION& rPosition ) const;
返回值:
如果是通过一个指向const CTypedPtrList的指针访问此列表,则GetPrev返回一个类型由模板参数TYPE指定的指针。这使此函数只能被使用在赋值语句的右边,这样就保护了列表不被修改。
如果列表被直接访问,或通过一个指向CTypedPtrList的指针访问,则GetPrev返回对一个类型由模板参数TYPE指定的指针的引用。这使得此函数可以使用在赋值语句的任何一边,从而允许该列表可以被修改。
参数: TYPE 指定保存在列表中的元素类型的模板参数。
rPosition 一个对先前调用GetPrev或其它成员函数返回的POSITION值的引用。
说明:
此成员函数用来获取由rPosition标识的列表元素,然后将rPosition设置为列表中的下一个项的POSITION值。如果你是通过调用GetTailPosition或Find来建立初始位置的,你就可以使用GetPrev来实现一个反向的反复循环。
你必须保证你的POSITION值代表的是列表中的一个有效位置。如果位置是无效的,则Microsoft基础类库的调试版将给出断言。
如果获取的元素是列表中的第一个,则rPosition被设置为新值NULL。
CTypedPtrList::GetAt
TYPE& GetAt( POSITION position );
TYPE GetAt( POSITION position ) const;
返回值:
如果是通过一个指向const CTypedPtrList的指针访问此列表,则GetAt返回一个类型由模板参数TYPE指定的指针。这使此函数只能被使用在赋值语句的右边,这样就保护了列表不被修改。
如果列表被直接访问,或通过一个指向CTypedPtrList的指针访问,则GetAt返回对一个类型由模板参数TYPE指定的指针的引用。这使得此函数可以使用在赋值语句的任何一边,从而允许该列表可以被修改。
参数: TYPE 指定保存在列表中的元素类型的模板参数。
position 一个由先前调用GetHeadPosition或Find成员函数返回的POSITION值。
说明:
一个类型为POSITION的变量是此列表的一个关键字。它与索引是不一样的,你不能自己处理一个POSITION值。GetAt获取与一个给定位置关联的CObject指针。
你必须确保你的POSITION值表示的是列表中的一个有效位置。如果它是无效的,则Microsoft基础类库的调试版将给出断言。
这个内联函数调用了BASE_CLASS::GetAt。
CTypedPtrList::SetAt
void SetAt( POSITION pos, TYPE newElement );
参数: pos 要被设置的元素的POSITION。
TYPE 保存在基类列表中的元素类型。
newElement 要被写入列表中去的对象指针。
说明:
此成员函数调用BASE_CLASS::SetAt。
一个类型为POSITION的变量是此列表的一个关键字。它与索引是不一样的,你不能自己处理一个POSITION值。SetAt写对象指针到列表中指定位置。
你必须确保你的POSITION值表示的是列表中的一个有效位置。如果它是无效的,则Microsoft基础类库的调试版将给出断言。
更多的细节说明,参见CObList::SetAt。