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 |
傳回清單的 tail 元素(不能空白)。 |
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
的詳細資訊,請參閱集合一文。
繼承階層架構
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 ); |
範例
以下是所有集合範例中使用的衍生類別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
的其他成員函式。
類別 | 成員函式 |
---|---|
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
值,可用於反覆項目或物件指標擷取;NULL
如果nIndex
太大則為 。 (如果 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
POSITION
先前GetHeadPosition
或Find
成員函式呼叫所傳回的值。
傳回值
請參閱的 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
取得指標,表示這個清單的tail元素。
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
取得這個清單的 tail 元素位置; 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
POSITION
先前GetNext
、 GetPrev
或 Find
成員函式呼叫所傳回的值。
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
POSITION
先前GetNext
、 GetPrev
或 Find
成員函式呼叫所傳回的值。
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 ); |
範例
在清單反覆項目期間移除專案時,請小心。 下列範例顯示一種移除技術,可保證的有效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
的其他成員函式。
類別 | 成員函式 |
---|---|
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