通过


CObList

注释

Microsoft基础类(MFC)库将继续受到支持。 但是,我们不再添加功能或更新文档。

支持按顺序或按指针值访问的非统 CObject 一指针的有序列表。

Syntax

class CObList : public CObject

Members

公共构造函数

姓名 Description
CObList::CObList 构造指针的 CObject 空列表。

公共方法

姓名 Description
CObList::AddHead 将一个元素(或另一个列表中的所有元素)添加到列表的头(使新头)。
CObList::AddTail 将一个元素(或另一个列表中的所有元素)添加到列表的尾部(使新尾部)。
CObList::Find 获取由指针值指定的元素的位置。
CObList::FindIndex 获取由从零开始的索引指定的元素的位置。
CObList::GetAt 获取位于给定位置的元素。
CObList::GetCount 返回此列表中的元素数。
CObList::GetHead 返回列表的头元素(不能为空)。
CObList::GetHeadPosition 返回列表的 head 元素的位置。
CObList::GetNext 获取用于迭代的下一个元素。
CObList::GetPrev 获取用于迭代的上一个元素。
CObList::GetSize 返回此列表中的元素数。
CObList::GetTail 返回列表的结尾元素(不能为空)。
CObList::GetTailPosition 返回列表尾元素的位置。
CObList::InsertAfter 在给定位置之后插入新元素。
CObList::InsertBefore 在给定位置之前插入新元素。
CObList::IsEmpty 测试空列表条件(无元素)。
CObList::RemoveAll 从此列表中删除所有元素。
CObList::RemoveAt 从此列表中删除按位置指定的元素。
CObList::RemoveHead 从列表的头中删除该元素。
CObList::RemoveTail 从列表尾部删除元素。
CObList::SetAt 设置位于给定位置的元素。

注解

CObList 列表的行为类似于多维链接的列表。

类型的 POSITION 变量是列表的键。 可以使用 POSITION 变量作为迭代器按顺序遍历列表,并用作书签来存放位置。 但是,位置与索引不同。

元素插入在列表头、尾部和已知 POSITION位置非常快。 按值或索引查找元素需要顺序搜索。 如果列表很长,则此搜索速度可能很慢。

CObList 包含宏 IMPLEMENT_SERIAL 以支持其元素的序列化和转储。 如果指针列表 CObject 存储在存档中(使用重载插入运算符或 Serialize 成员函数)时,则会依次序列化每个 CObject 元素。

如果需要在列表中转储单个 CObject 元素,则必须将转储上下文的深度设置为 1 或更大。

CObList删除对象或删除其元素时,仅CObject删除指针,而不是它们引用的对象。

可以从中派生自己的类 CObList。 新的列表类,旨在保存指向派生自 CObject的对象的指针,添加新的数据成员和新成员函数。 请注意,生成的列表并非严格类型安全,因为它允许插入任何 CObject 指针。

注释

如果要序列化列表,则必须 IMPLEMENT_SERIAL 在派生类的实现中使用宏。

有关使用 CObList的详细信息,请参阅 “集合”一文。

继承层次结构

CObject

CObList

要求

标头afxcoll.h

CObList::AddHead

将新元素或元素列表添加到此列表的头。

POSITION AddHead(CObject* newElement);
void AddHead(CObList* pNewList);

参数

newElement
要添加到此列表的 CObject 指针。

pNewList
指向另一个 CObList 列表的指针。 该列表中的 pNewList 元素将添加到此列表中。

返回值

第一个版本返回 POSITION 新插入的元素的值。

下表显示了其他 CObList::AddHead类似的成员函数。

Class 成员函数
CPtrList POSITION AddHead( void * newElement );

void AddHead( CPtrList * pNewList );
CStringList POSITION AddHead(const CString& newElement );

POSITION AddHead(LPCTSTR newElement );

void AddHead(CStringList * pNewList );

注解

该列表在作之前可以为空。

Example

有关类的列表,CAge请参阅CObList::CObList

CObList list;
list.AddHead(new CAge(21)); // 21 is now at head.
list.AddHead(new CAge(40)); // 40 replaces 21 at head.
#ifdef _DEBUG
afxDump.SetDepth(1);
afxDump << _T("AddHead example: ") << &list << _T("\n");
#endif      

此程序的结果如下所示:

AddHead example: A CObList with 2 elements
a CAge at $44A8 40
a CAge at $442A 21

CObList::AddTail

将新元素或元素列表添加到此列表的尾部。

POSITION AddTail(CObject* newElement);
void AddTail(CObList* pNewList);

参数

newElement
要添加到此列表的 CObject 指针。

pNewList
指向另一个 CObList 列表的指针。 该列表中的 pNewList 元素将添加到此列表中。

返回值

第一个版本返回 POSITION 新插入的元素的值。

注解

该列表在作之前可以为空。

下表显示了其他 CObList::AddTail类似的成员函数。

Class 成员函数
CPtrList POSITION AddTail( void * newElement );

void AddTail( CPtrList * pNewList );
CStringList POSITION AddTail( const CString& newElement );

POSITION AddTail( LPCTSTR newElement );

void AddTail( CStringList * pNewList );

Example

有关类的列表,CAge请参阅CObList::CObList

CObList list;
list.AddTail(new CAge(21));
list.AddTail(new CAge(40)); // List now contains (21, 40).
#ifdef _DEBUG
afxDump.SetDepth(1);
afxDump << _T("AddTail example: ") << &list << _T("\n");
#endif      

此程序的结果如下所示:

AddTail example: A CObList with 2 elements
a CAge at $444A 21
a CAge at $4526 40

CObList::CObList

构造空 CObject 指针列表。

CObList(INT_PTR nBlockSize = 10);

参数

nBlockSize
用于扩展列表的内存分配粒度。

注解

随着列表的增长,内存以条目单位 nBlockSize 分配。 如果内存分配失败,则会引发 a CMemoryException

下表显示了其他 CObList::CObList类似的成员函数。

Class 成员函数
CPtrList CPtrList( INT_PTR nBlockSize = 10 );
CStringList CStringList( INT_PTR nBlockSize = 10 );

Example

下面是所有集合示例中使用的派生类CAge的列表CObject

// Simple CObject-derived class for CObList and other examples
class CAge : public CObject
{
   DECLARE_SERIAL(CAge)
private:
   int   m_years;
public:
   CAge() { m_years = 0; }
   CAge(int age) { m_years = age; }
   CAge(const CAge& a) { m_years = a.m_years; } // Copy constructor
   void Serialize(CArchive& ar);
   void AssertValid() const;
   const CAge& operator=(const CAge& a)
   {
      m_years = a.m_years; return *this;
   }
   BOOL operator==(CAge a)
   {
      return m_years == a.m_years;
   }
#ifdef _DEBUG
   void Dump(CDumpContext& dc) const
   {
      CObject::Dump(dc);
      dc << m_years;
   }
#endif
};

下面是构造函数用法的示例 CObList

CObList list(20);  // List on the stack with blocksize = 20.

CObList* plist = new CObList; // List on the heap with default 
                              // blocksize.         

CObList::Find

按顺序搜索列表以查找与指定CObject指针匹配的第一个CObject指针。

POSITION Find(
    CObject* searchValue,
    POSITION startAfter = NULL) const;

参数

searchValue
要在此列表中找到的对象指针。

startAfter
搜索的起始位置。

返回值

POSITION可用于迭代或对象指针检索的值;NULL如果找不到该对象。

注解

请注意,将比较指针值,而不是对象的内容。

下表显示了其他 CObList::Find类似的成员函数。

Class 成员函数
CPtrList POSITION Find( void *searchValue , POSITION startAfter = NULL ) const;
CStringList POSITION Find( LPCTSTR searchValue , POSITION startAfter = NULL ) const;

Example

有关类的列表,CAge请参阅CObList::CObList

CObList list;
CAge* pa1;
CAge* pa2;
POSITION pos;
list.AddHead(pa1 = new CAge(21));
list.AddHead(pa2 = new CAge(40));    // List now contains (40, 21).
if ((pos = list.Find(pa1)) != NULL) // Hunt for pa1
{                                  // starting at head by default.
   ASSERT(*(CAge*)list.GetAt(pos) == CAge(21));
}

CObList::FindIndex

将值 nIndex 用作列表中的索引。

POSITION FindIndex(INT_PTR nIndex) const;

参数

nIndex
要找到的列表元素的从零开始的索引。

返回值

POSITION可用于迭代或对象指针检索的值;NULL如果nIndex太大。 (如果为负,框架将生成断言 nIndex

注解

它从列表的头开始顺序扫描,停止在第 n个元素上。

下表显示了其他 CObList::FindIndex类似的成员函数。

Class 成员函数
CPtrList POSITION FindIndex( INT_PTR nIndex ) const;
CStringList POSITION FindIndex( INT_PTR nIndex ) const;

Example

有关类的列表,CAge请参阅CObList::CObList

CObList list;
POSITION pos;

list.AddHead(new CAge(21));
list.AddHead(new CAge(40)); // List now contains (40, 21).
if ((pos = list.FindIndex(0)) != NULL)
{
   ASSERT(*(CAge*)list.GetAt(pos) == CAge(40));
}

CObList::GetAt

类型的 POSITION 变量是列表的键。

CObject*& GetAt(POSITION position);
const CObject*& GetAt(POSITION position) const;

参数

position
GetHeadPositionPOSITION个或Find成员函数调用返回的值。

返回值

请参阅返回值说明 GetHead

注解

它与索引不同,你不能自己对 POSITION 值进行作。 GetAt CObject检索与给定位置关联的指针。

必须确保值 POSITION 表示列表中的有效位置。 如果无效,则Microsoft基础类库的调试版本断言。

下表显示了其他 CObList::GetAt类似的成员函数。

Class 成员函数
CPtrList const void*& GetAt( POSITION position ) const;

void*& GetAt( POSITION position );
CStringList const CString& GetAt( POSITION position ) const;

CString& GetAt( POSITION position );

Example

请参阅 FindIndex 的示例。

CObList::GetCount

获取此列表中的元素数。

INT_PTR GetCount() const;

返回值

包含元素计数的整数值。

下表显示了其他 CObList::GetCount类似的成员函数。

Class 成员函数
CPtrList INT_PTR GetCount( ) const;
CStringList INT_PTR GetCount( ) const;

Example

有关类的列表,CAge请参阅CObList::CObList

CObList list;

list.AddHead(new CAge(21));
list.AddHead(new CAge(40)); // List now contains (40, 21).
ASSERT(list.GetCount() == 2);

CObList::GetHead

获取表示 CObject 此列表的头元素的指针。

CObject*& GetHead();
const CObject*& GetHead() const;

返回值

如果通过指向 a const CObList的指针访问列表,则 GetHead 返回一个 CObject 指针。 这允许函数仅在赋值语句的右侧使用,从而防止列表修改。

如果直接或通过指向指针 CObList的指针访问列表,则 GetHead 返回对指针的 CObject 引用。 这允许在赋值语句的任一端使用函数,从而允许修改列表条目。

注解

在调用 GetHead之前,必须确保列表不为空。 如果列表为空,则Microsoft基础类库的调试版本断言。 用于 IsEmpty 验证列表是否包含元素。

下表显示了其他 CObList::GetHead类似的成员函数。

Class 成员函数
CPtrList const void*& GetHead( ) const; void*& GetHead( );
CStringList const CString& GetHead( ) const; CString& GetHead( );

Example

有关类的列表,CAge请参阅CObList::CObList

下面的示例演示了赋值语句左侧的用法 GetHead

const CObList* cplist;

CObList* plist = new CObList;
CAge* page1 = new CAge(21);
CAge* page2 = new CAge(30);
CAge* page3 = new CAge(40);
plist->AddHead(page1);
plist->AddHead(page2);  // List now contains (30, 21).
// The following statement REPLACES the head element.
plist->GetHead() = page3; // List now contains (40, 21).
ASSERT(*(CAge*)plist->GetHead() == CAge(40));
cplist = plist;  // cplist is a pointer to a const list.
// cplist->GetHead() = page3; // Error: can't assign a pointer to a const list
ASSERT(*(CAge*)plist->GetHead() == CAge(40)); // OK

delete page1;
delete page2;
delete page3;
delete plist; // Cleans up memory.      

CObList::GetHeadPosition

获取此列表的 head 元素的位置。

POSITION GetHeadPosition() const;

返回值

POSITION可用于迭代或对象指针检索的值;NULL如果列表为空。

下表显示了其他 CObList::GetHeadPosition类似的成员函数。

Class 成员函数
CPtrList POSITION GetHeadPosition( ) const;
CStringList POSITION GetHeadPosition( ) const;

Example

有关类的列表,CAge请参阅CObList::CObList

CObList list;
POSITION pos;

list.AddHead(new CAge(21));
list.AddHead(new CAge(40)); // List now contains (40, 21).
if ((pos = list.GetHeadPosition()) != NULL)
{
   ASSERT(*(CAge*)list.GetAt(pos) == CAge(40));
}

CObList::GetNext

获取由rPosition该列表标识的列表元素,然后将它设置为rPositionPOSITION列表中的下一项的值。

CObject*& GetNext(POSITION& rPosition);
const CObject* GetNext(POSITION& rPosition) const;

参数

rPosition
对上GetNextPOSITION个或GetHeadPosition其他成员函数调用返回的值的引用。

返回值

请参阅返回值说明 GetHead

注解

如果使用调用GetHeadPositionFind建立初始位置,则可以在GetNext正向迭代循环中使用。

必须确保值 POSITION 表示列表中的有效位置。 如果无效,则Microsoft基础类库的调试版本断言。

如果检索到的元素是列表中的最后一个元素,则将新值 rPosition 设置为 NULL

可以在迭代期间删除元素。 请参阅 RemoveAt 的示例。

注释

从 MFC 8.0 开始,此方法的常量版本已更改为返回,const CObject*&而不是 。const CObject* 进行了此更改,使编译器符合 C++ 标准。

下表显示了其他 CObList::GetNext类似的成员函数。

Class 成员函数
CPtrList void*& GetNext( POSITION& rPosition );

const void* GetNext( POSITION& rPosition ) const;
CStringList CString& GetNext( POSITION& rPosition );

const CString& GetNext( POSITION& rPosition ) const;

Example

有关类的列表,CAge请参阅CObList::CObList

CObList list;
POSITION pos;
list.AddHead(new CAge(21));
list.AddHead(new CAge(40)); // List now contains (40, 21).
// Iterate through the list in head-to-tail order.
#ifdef _DEBUG
for (pos = list.GetHeadPosition(); pos != NULL;)
{
   afxDump << list.GetNext(pos) << _T("\n");
}
#endif      

此程序的结果如下所示:

a CAge at $479C 40
a CAge at $46C0 21

CObList::GetPrev

获取由rPosition该列表标识的列表元素,然后将它设置为rPositionPOSITION列表中上一项的值。

CObject*& GetPrev(POSITION& rPosition);
const CObject* GetPrev(POSITION& rPosition) const;

参数

rPosition
对上GetPrevPOSITION个或其他成员函数调用返回的值的引用。

返回值

请参阅返回值说明 GetHead

注解

如果使用调用GetTailPositionFind建立初始位置,则可以在GetPrev反向迭代循环中使用。

必须确保值 POSITION 表示列表中的有效位置。 如果无效,则Microsoft基础类库的调试版本断言。

如果检索到的元素是列表中的第一个元素,则将新值 rPosition 设置为 NULL

注释

从 MFC 8.0 开始,此方法的常量版本已更改为返回,const CObject*&而不是 。const CObject* 进行了此更改,使编译器符合 C++ 标准。

下表显示了其他 CObList::GetPrev类似的成员函数。

Class 成员函数
CPtrList void*& GetPrev( POSITION& rPosition );

const void* GetPrev( POSITION& rPosition ) const;
CStringList CString& GetPrev( POSITION& rPosition );

const CString& GetPrev( POSITION& rPosition ) const;

Example

有关类的列表,CAge请参阅CObList::CObList

CObList list;
POSITION pos;

list.AddHead(new CAge(21));
list.AddHead(new CAge(40)); // List now contains (40, 21).
// Iterate through the list in tail-to-head order.
for (pos = list.GetTailPosition(); pos != NULL;)
{
#ifdef _DEBUG
   afxDump << list.GetPrev(pos) << _T("\n");
#endif
}

此程序的结果如下所示:

a CAge at $421C 21
a CAge at $421C 40

CObList::GetSize

返回列表元素的数目。

INT_PTR GetSize() const;

返回值

列表中的项数。

注解

调用此方法以检索列表中的元素数。

下表显示了其他 CObList::GetSize类似的成员函数。

Class 成员函数
CPtrList INT_PTR GetSize( ) const;
CStringList INT_PTR GetSize( ) const;

Example

有关类的列表,CAge请参阅CObList::CObList

CObList list;

list.AddHead(new CAge(21));
list.AddHead(new CAge(40)); // List now contains (40, 21).
ASSERT(list.GetSize() == 2);

CObList::GetTail

获取表示 CObject 此列表的结尾元素的指针。

CObject*& GetTail();
const CObject*& GetTail() const;

返回值

请参阅返回值说明 GetHead

注解

在调用 GetTail之前,必须确保列表不为空。 如果列表为空,则Microsoft基础类库的调试版本断言。 用于 IsEmpty 验证列表是否包含元素。

下表显示了其他 CObList::GetTail类似的成员函数。

Class 成员函数
CPtrList const void*& GetTail( ) const; void*& GetTail( );
CStringList const CString& GetTail( ) const; CString& GetTail( );

Example

有关类的列表,CAge请参阅CObList::CObList

CObList list;

list.AddHead(new CAge(21));
list.AddHead(new CAge(40)); // List now contains (40, 21).
ASSERT(*(CAge*)list.GetTail() == CAge(21));

CObList::GetTailPosition

获取此列表的结尾元素的位置; NULL 如果列表为空,

POSITION GetTailPosition() const;

返回值

POSITION可用于迭代或对象指针检索的值;NULL如果列表为空。

下表显示了其他 CObList::GetTailPosition类似的成员函数。

Class 成员函数
CPtrList POSITION GetTailPosition( ) const;
CStringList POSITION GetTailPosition( ) const;

Example

有关类的列表,CAge请参阅CObList::CObList

CObList list;
POSITION pos;

list.AddHead(new CAge(21));
list.AddHead(new CAge(40)); // List now contains (40, 21).
if ((pos = list.GetTailPosition()) != NULL)
{
    ASSERT(*(CAge*) list.GetAt(pos) == CAge(21));
}     

CObList::InsertAfter

将元素添加到此列表后,该元素位于指定位置。

POSITION InsertAfter(
    POSITION position,
    CObject* newElement);

参数

position
GetNext一个POSITIONGetPrevFind成员函数调用返回的值。

newElement
要添加到此列表的对象指针。

下表显示了其他 CObList::InsertAfter类似的成员函数。

Class 成员函数
CPtrList POSITION InsertAfter( POSITION position , void * newElement );
CStringList POSITION InsertAfter( POSITION position , const CString& newElement );

POSITION InsertAfter( POSITION position , LPCTSTR newElement );

返回值

POSITION 参数相同的 position 值。

Example

有关类的列表,CAge请参阅CObList::CObList

CObList list;
POSITION pos1, pos2;
list.AddHead(new CAge(21));
list.AddHead(new CAge(40)); // List now contains (40, 21).
if ((pos1 = list.GetHeadPosition()) != NULL)
{
    pos2 = list.InsertAfter(pos1, new CAge(65));
}
#ifdef _DEBUG
   afxDump.SetDepth(1);
   afxDump << _T("InsertAfter example: ") << &list << _T("\n");
#endif

此程序的结果如下所示:

InsertAfter example: A CObList with 3 elements
a CAge at $4A44 40
a CAge at $4A64 65
a CAge at $4968 21

CObList::InsertBefore

在位于指定位置的元素之前,将元素添加到此列表中。

POSITION InsertBefore(
    POSITION position,
    CObject* newElement);

参数

position
GetNext一个POSITIONGetPrevFind成员函数调用返回的值。

newElement
要添加到此列表的对象指针。

返回值

POSITION可用于迭代或对象指针检索的值;NULL如果列表为空。

下表显示了其他 CObList::InsertBefore类似的成员函数。

Class 成员函数
CPtrList POSITION InsertBefore( POSITION position , void * newElement );
CStringList POSITION InsertBefore( POSITION position , const CString& newElement );

POSITION InsertBefore( POSITION position , LPCTSTR newElement );

Example

有关类的列表,CAge请参阅CObList::CObList

CObList list;
POSITION pos1, pos2;
list.AddHead(new CAge(21));
list.AddHead(new CAge(40)); // List now contains (40, 21).
if ((pos1 = list.GetTailPosition()) != NULL)
{
    pos2 = list.InsertBefore(pos1, new CAge(65));
}
#ifdef _DEBUG
   afxDump.SetDepth(1);
   afxDump << _T("InsertBefore example: ") << &list << _T("\n");
#endif      

此程序的结果如下所示:

InsertBefore example: A CObList with 3 elements
a CAge at $4AE2 40
a CAge at $4B02 65
a CAge at $49E6 21

CObList::IsEmpty

指示此列表是否不包含任何元素。

BOOL IsEmpty() const;

返回值

如果此列表为空,则为非零;否则为 0。

下表显示了其他 CObList::IsEmpty类似的成员函数。

Class 成员函数
CPtrList BOOL IsEmpty() const;
CStringList BOOL IsEmpty() const;

Example

请参阅 RemoveAll 的示例。

CObList::RemoveAll

从此列表中删除所有元素并释放关联的 CObList 内存。

void RemoveAll();

注解

如果列表已为空,则不会生成错误。

从列表中 CObList删除元素时,将从列表中删除对象指针。 你有责任自行删除对象。

下表显示了其他 CObList::RemoveAll类似的成员函数。

Class 成员函数
CPtrList void RemoveAll( );
CStringList void RemoveAll( );

Example

有关类的列表,CAge请参阅CObList::CObList

CObList list;
CAge* pa1;
CAge* pa2;
ASSERT(list.IsEmpty()); // Yes it is.
list.AddHead(pa1 = new CAge(21));
list.AddHead(pa2 = new CAge(40)); // List now contains (40, 21).
ASSERT(!list.IsEmpty()); // No it isn't.
list.RemoveAll(); // CAges aren't destroyed.
ASSERT(list.IsEmpty()); // Yes it is.
delete pa1;     // Now delete the CAge objects.
delete pa2;

CObList::RemoveAt

从此列表中删除指定的元素。

void RemoveAt(POSITION position);

参数

position
要从列表中删除的元素的位置。

注解

CObList列表中删除元素时,将从列表中删除对象指针。 你有责任自行删除对象。

必须确保值 POSITION 表示列表中的有效位置。 如果无效,则Microsoft基础类库的调试版本断言。

下表显示了其他 CObList::RemoveAt类似的成员函数。

Class 成员函数
CPtrList void RemoveAt( POSITION position );
CStringList void RemoveAt( POSITION position );

Example

在列表迭代期间删除元素时请小心。 下面的示例演示了一种可保证有效 POSITION 值的 GetNext删除技术。

有关类的列表,CAge请参阅CObList::CObList

CObList list;
POSITION pos1, pos2;
CObject* pa;

list.AddHead(new CAge(21));
list.AddHead(new CAge(40));
list.AddHead(new CAge(65)); // List now contains (65 40, 21).
for (pos1 = list.GetHeadPosition(); (pos2 = pos1) != NULL;)
{
   if (*(CAge*)list.GetNext(pos1) == CAge(40))
   {
      pa = list.GetAt(pos2); // Save the old pointer for
                             //deletion.
      list.RemoveAt(pos2);
      delete pa; // Deletion avoids memory leak.
   }
}
#ifdef _DEBUG
afxDump.SetDepth(1);
afxDump << _T("RemoveAt example: ") << &list << _T("\n");
#endif      

此程序的结果如下所示:

RemoveAt example: A CObList with 2 elements

a CAge at $4C1E 65

a CAge at $4B22 21

CObList::RemoveHead

从列表的头中删除该元素,并返回指向它的指针。

CObject* RemoveHead();

返回值

CObject之前位于列表头的指针。

注解

在调用 RemoveHead之前,必须确保列表不为空。 如果列表为空,则Microsoft基础类库的调试版本断言。 用于 IsEmpty 验证列表是否包含元素。

下表显示了其他 CObList::RemoveHead类似的成员函数。

Class 成员函数
CPtrList void* RemoveHead( );
CStringList CString RemoveHead( );

Example

有关类的列表,CAge请参阅CObList::CObList

CObList list;
CAge* pa1;
CAge* pa2;

list.AddHead(pa1 = new CAge(21));
list.AddHead(pa2 = new CAge(40)); // List now contains (40, 21).
ASSERT(*(CAge*)list.RemoveHead() == CAge(40));  // Old head
ASSERT(*(CAge*)list.GetHead() == CAge(21));  // New head
delete pa1;
delete pa2;

CObList::RemoveTail

从列表尾部删除元素,并返回指向它的指针。

CObject* RemoveTail();

返回值

指向列表尾部的对象指针。

注解

在调用 RemoveTail之前,必须确保列表不为空。 如果列表为空,则Microsoft基础类库的调试版本断言。 用于 IsEmpty 验证列表是否包含元素。

下表显示了其他 CObList::RemoveTail类似的成员函数。

Class 成员函数
CPtrList void* RemoveTail( );
CStringList CString RemoveTail( );

Example

有关类的列表,CAge请参阅CObList::CObList

CObList list;
CAge* pa1;
CAge* pa2;

list.AddHead(pa1 = new CAge(21));
list.AddHead(pa2 = new CAge(40)); // List now contains (40, 21).
ASSERT(*(CAge*)list.RemoveTail() == CAge(21));  // Old tail
ASSERT(*(CAge*)list.GetTail() == CAge(40));  // New tail
delete pa1;
delete pa2; // Clean up memory.      

CObList::SetAt

设置位于给定位置的元素。

void SetAt(
    POSITION pos,
    CObject* newElement);

参数

pos
POSITION要设置的元素。

newElement
CObject 写入列表的指针。

注解

类型的 POSITION 变量是列表的键。 它与索引不同,你不能自己对 POSITION 值进行作。 SetAt 写入 CObject 指向列表中指定位置的指针。

必须确保值 POSITION 表示列表中的有效位置。 如果无效,则Microsoft基础类库的调试版本断言。

下表显示了其他 CObList::SetAt类似的成员函数。

Class 成员函数
CPtrList void SetAt( POSITION pos , const CString& newElement );
CStringList void SetAt( POSITION pos , LPCTSTR newElement );

Example

有关类的列表,CAge请参阅CObList::CObList

CObList list;
CObject* pa;
POSITION pos;

list.AddHead(new CAge(21));
list.AddHead(new CAge(40)); // List now contains (40, 21).
if ((pos = list.GetTailPosition()) != NULL)
{
   pa = list.GetAt(pos); // Save the old pointer for 
                         //deletion.
   list.SetAt(pos, new CAge(65));  // Replace the tail 
                                     //element.
   delete pa;  // Deletion avoids memory leak.
}
#ifdef _DEBUG
afxDump.SetDepth(1);
afxDump << _T("SetAt example: ") << &list << _T("\n");
#endif      

此程序的结果如下所示:

SetAt example: A CObList with 2 elements
a CAge at $4D98 40
a CAge at $4DB8 65

另请参阅

CObject
层次结构图
CStringList
CPtrList