CObList
类
支持可按顺序或指针值访问的非唯一 CObject
指针的有序列表。
语法
class CObList : public CObject
成员
公共构造函数
名称 | 描述 |
---|---|
CObList::CObList |
为 CObject 指针构造一个空列表。 |
公共方法
名称 | 描述 |
---|---|
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
宏。 如果使用重载插入运算符或 Serialize
成员函数将 CObject
指针的列表存储到存档中,则将依次序列化每个 CObject
元素。
如果需要转储列表中的单个 CObject
元素,必须将转储上下文的深度设置为 1 或更大的值。
删除 CObList
对象或删除其元素时,仅删除 CObject
指针,而不删除指针引用的对象。
可以从 CObList
中派生自己的类。 新列表类旨在保存指向从 CObject
派生的对象的指针,可添加新数据成员和新成员函数。 请注意,由于生成的列表允许插入任何 CObject
指针,其并非完全类型安全。
注意
如果要序列化列表,则必须在派生类的实现中使用 IMPLEMENT_SERIAL
宏。
若要详细了解如何使用 CObList
,请参阅集合一文。
继承层次结构
CObList
要求
标头:afxcoll.h
CObList::AddHead
将新元素或元素列表添加到此列表的头部。
POSITION AddHead(CObject* newElement);
void AddHead(CObList* pNewList);
参数
newElement
要添加到此列表中的 CObject
指针。
pNewList
指向另一个 CObList
列表的指针。 pNewList
中的元素将添加到此列表中。
返回值
第一个版本返回新插入元素的 POSITION
值。
下表显示了与 CObList::AddHead
类似的其他成员函数。
类 | 成员函数 |
---|---|
CPtrList |
POSITION AddHead( void * newElement ); void AddHead( CPtrList * pNewList ); |
CStringList |
POSITION AddHead(const CString& newElement ); POSITION AddHead(LPCTSTR newElement ); void AddHead(CStringList * pNewList ); |
注解
在操作之前列表可以为空。
示例
有关 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
类似的其他成员函数。
类 | 成员函数 |
---|---|
CPtrList |
POSITION AddTail( void * newElement ); void AddTail( CPtrList * pNewList ); |
CStringList |
POSITION AddTail( const CString& newElement ); POSITION AddTail( LPCTSTR newElement ); void AddTail( CStringList * pNewList ); |
示例
有关 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
条目为单位进行分配。 如果内存分配失败,则会引发 CMemoryException
。
下表显示了与 CObList::CObList
类似的其他成员函数。
类 | 成员函数 |
---|---|
CPtrList |
CPtrList( INT_PTR nBlockSize = 10 ); |
CStringList |
CStringList( INT_PTR nBlockSize = 10 ); |
示例
以下是所有集合示例中使用的 CObject
派生类 CAge
的列表:
// 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
类似的其他成员函数。
类 | 成员函数 |
---|---|
CPtrList |
POSITION Find( void *searchValue , POSITION startAfter = NULL ) const; |
CStringList |
POSITION Find( LPCTSTR searchValue , POSITION startAfter = NULL ) const; |
示例
有关 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
值;如果 nIndex
太大,则为 NULL
。 (如果 nIndex
为负值,则框架将生成断言。)
注解
它从列表的头部开始按顺序扫描,在第 n 个元素上停止。
下表显示了与 CObList::FindIndex
类似的其他成员函数。
类 | 成员函数 |
---|---|
CPtrList |
POSITION FindIndex( INT_PTR nIndex ) const; |
CStringList |
POSITION FindIndex( INT_PTR nIndex ) const; |
示例
有关 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
由先前的 GetHeadPosition
或 Find
成员函数调用返回的 POSITION
值。
返回值
请参阅 GetHead
的返回值说明。
备注
它与索引不同,不可自行对 POSITION
值进行操作。 GetAt
检索与给定位置关联的 CObject
指针。
必须确保 POSITION
值代表列表中的有效位置。 如果该值无效,则 Microsoft 基础类库的调试版本会断言。
下表显示了与 CObList::GetAt
类似的其他成员函数。
类 | 成员函数 |
---|---|
CPtrList |
const void*& GetAt( POSITION position ) const; void*& GetAt( POSITION position ); |
CStringList |
const CString& GetAt( POSITION position ) const; CString& GetAt( POSITION position ); |
示例
请参阅 FindIndex
的示例。
CObList::GetCount
获取此列表中的元素数。
INT_PTR GetCount() const;
返回值
包含元素计数的整数值。
下表显示了与 CObList::GetCount
类似的其他成员函数。
类 | 成员函数 |
---|---|
CPtrList |
INT_PTR GetCount( ) const; |
CStringList |
INT_PTR GetCount( ) const; |
示例
有关 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;
返回值
如果通过指向 const CObList
的指针访问列表,则 GetHead
会返回 CObject
指针。 这允许仅在赋值语句的右侧使用该函数,因此还能防止修改列表。
如果直接或通过指向 CObList
的指针访问列表,则 GetHead
返回对 CObject
指针的引用。 这允许在赋值语句的任一侧使用该函数,从而允许修改列表条目。
注解
在调用 GetHead
之前,必须确保列表不为空。 如果该列表为空,则 Microsoft 基础类库的调试版本会断言。 使用 IsEmpty
验证列表是否包含元素。
下表显示了与 CObList::GetHead
类似的其他成员函数。
类 | 成员函数 |
---|---|
CPtrList |
const void*& GetHead( ) const; void*& GetHead( ); |
CStringList |
const CString& GetHead( ) const; CString& GetHead( ); |
示例
有关 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
获取此列表的头部元素的位置。
POSITION GetHeadPosition() const;
返回值
可用于迭代或对象指针检索的 POSITION
值;如果列表为空,则为 NULL
。
下表显示了与 CObList::GetHeadPosition
类似的其他成员函数。
类 | 成员函数 |
---|---|
CPtrList |
POSITION GetHeadPosition( ) const; |
CStringList |
POSITION GetHeadPosition( ) const; |
示例
有关 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
标识的列表元素,然后将 rPosition
设置为列表中下一个条目的 POSITION
值。
CObject*& GetNext(POSITION& rPosition);
const CObject* GetNext(POSITION& rPosition) const;
参数
rPosition
对由以前的 GetNext
、GetHeadPosition
或其他成员函数调用返回的 POSITION
值的引用。
返回值
请参阅 GetHead
的返回值说明。
备注
如果通过调用 GetHeadPosition
或 Find
建立初始位置,则可以在正向迭代循环中使用 GetNext
。
必须确保 POSITION
值代表列表中的有效位置。 如果该值无效,则 Microsoft 基础类库的调试版本会断言。
如果检索到的元素是列表中的最后一个元素,则 rPosition
的新值设置为 NULL
。
可以在迭代期间移除元素。 请参阅 RemoveAt
的示例。
注意
从 MFC 8.0 开始,此方法的 const 版本已更改为返回 const CObject*
(而不是 const CObject*&
)。 进行此更改是为了使编译器符合 C++ 标准。
下表显示了与 CObList::GetNext
类似的其他成员函数。
类 | 成员函数 |
---|---|
CPtrList |
void*& GetNext( POSITION& rPosition ); const void* GetNext( POSITION& rPosition ) const; |
CStringList |
CString& GetNext( POSITION& rPosition ); const CString& GetNext( POSITION& rPosition ) const; |
示例
有关 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
标识的列表元素,然后将 rPosition
设置为列表中上一个条目的 POSITION
值。
CObject*& GetPrev(POSITION& rPosition);
const CObject* GetPrev(POSITION& rPosition) const;
参数
rPosition
对由以前的 GetPrev
或其他成员函数调用返回的 POSITION
值的引用。
返回值
请参阅 GetHead
的返回值说明。
备注
如果通过调用 GetTailPosition
或 Find
建立初始位置,则可以在反向迭代循环中使用 GetPrev
。
必须确保 POSITION
值代表列表中的有效位置。 如果该值无效,则 Microsoft 基础类库的调试版本会断言。
如果检索到的元素是列表中的第一个元素,则 rPosition
的新值会设置为 NULL
。
注意
从 MFC 8.0 开始,此方法的 const 版本已更改为返回 const CObject*
(而不是 const CObject*&
)。 进行此更改是为了使编译器符合 C++ 标准。
下表显示了与 CObList::GetPrev
类似的其他成员函数。
类 | 成员函数 |
---|---|
CPtrList |
void*& GetPrev( POSITION& rPosition ); const void* GetPrev( POSITION& rPosition ) const; |
CStringList |
CString& GetPrev( POSITION& rPosition ); const CString& GetPrev( POSITION& rPosition ) const; |
示例
有关 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
类似的其他成员函数。
类 | 成员函数 |
---|---|
CPtrList |
INT_PTR GetSize( ) const; |
CStringList |
INT_PTR GetSize( ) const; |
示例
有关 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
类似的其他成员函数。
类 | 成员函数 |
---|---|
CPtrList |
const void*& GetTail( ) const; void*& GetTail( ); |
CStringList |
const CString& GetTail( ) const; CString& GetTail( ); |
示例
有关 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
类似的其他成员函数。
类 | 成员函数 |
---|---|
CPtrList |
POSITION GetTailPosition( ) const; |
CStringList |
POSITION GetTailPosition( ) const; |
示例
有关 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
、GetPrev
或 Find
成员函数调用返回的 POSITION
值。
newElement
要添加到此列表的对象指针。
下表显示了与 CObList::InsertAfter
类似的其他成员函数。
类 | 成员函数 |
---|---|
CPtrList |
POSITION InsertAfter( POSITION position , void * newElement ); |
CStringList |
POSITION InsertAfter( POSITION position , const CString& newElement ); POSITION InsertAfter( POSITION position , LPCTSTR newElement ); |
返回值
与 position
参数相同的 POSITION
值。
示例
有关 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
、GetPrev
或 Find
成员函数调用返回的 POSITION
值。
newElement
要添加到此列表的对象指针。
返回值
可用于迭代或对象指针检索的 POSITION
值;如果列表为空,则为 NULL
。
下表显示了与 CObList::InsertBefore
类似的其他成员函数。
类 | 成员函数 |
---|---|
CPtrList |
POSITION InsertBefore( POSITION position , void * newElement ); |
CStringList |
POSITION InsertBefore( POSITION position , const CString& newElement ); POSITION InsertBefore( POSITION position , LPCTSTR newElement ); |
示例
有关 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
类似的其他成员函数。
类 | 成员函数 |
---|---|
CPtrList |
BOOL IsEmpty( ) const; |
CStringList |
BOOL IsEmpty( ) const; |
示例
请参阅 RemoveAll
的示例。
CObList::RemoveAll
从此列表中移除所有元素,并释放关联的 CObList
内存。
void RemoveAll();
备注
如果列表已为空,则不会生成错误。
从 CObList
中移除元素时,将移除列表中的对象指针。 你将负责删除对象本身。
下表显示了与 CObList::RemoveAll
类似的其他成员函数。
类 | 成员函数 |
---|---|
CPtrList |
void RemoveAll( ); |
CStringList |
void RemoveAll( ); |
示例
有关 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
类似的其他成员函数。
类 | 成员函数 |
---|---|
CPtrList |
void RemoveAt( POSITION position ); |
CStringList |
void RemoveAt( POSITION position ); |
示例
请在列表迭代期间谨慎删除元素。 以下示例介绍了一种移除技术,可保证 GetNext
的 POSITION
值有效。
有关 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
类似的其他成员函数。
类 | 成员函数 |
---|---|
CPtrList |
void* RemoveHead( ); |
CStringList |
CString RemoveHead( ); |
示例
有关 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
类似的其他成员函数。
类 | 成员函数 |
---|---|
CPtrList |
void* RemoveTail( ); |
CStringList |
CString RemoveTail( ); |
示例
有关 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
类似的其他成员函数。
类 | 成员函数 |
---|---|
CPtrList |
void SetAt( POSITION pos , const CString& newElement ); |
CStringList |
void SetAt( POSITION pos , LPCTSTR newElement ); |
示例
有关 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