CObList
クラス
一方的でない CObject
ポインターの順序付きリストを順番に、またはポインター値でアクセスできます。
構文
class CObList : public CObject
メンバー
パブリック コンストラクター
名前 | 説明 |
---|---|
CObList::CObList |
CObject ポインターの空のリストを構築します。 |
パブリック メソッド
名前 | 説明 |
---|---|
CObList::AddHead |
要素 (または別のリスト内のすべての要素) をリストの先頭に追加します (新しい先頭を作成します)。 |
CObList::AddTail |
リストの末尾に要素 (または別のリストのすべての要素) を追加します (新しい末尾を作成します)。 |
CObList::Find |
ポインター値で指定された要素の位置を取得します。 |
CObList::FindIndex |
0 から始まるインデックスで指定された要素の位置を取得します。 |
CObList::GetAt |
指定した位置にある要素を取得します。 |
CObList::GetCount |
このリスト内の要素の数を返します。 |
CObList::GetHead |
リストのヘッド要素を返します (空にすることはできません)。 |
CObList::GetHeadPosition |
リストのヘッド要素の位置を返します。 |
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
ポインターを挿入できるため、厳密には型セーフではないことに注意してください。
Note
リストをシリアル化する場合は、派生クラスの実装で IMPLEMENT_SERIAL
マクロを使用する必要があります。
CObList
の使用方法の詳細については、Collectionsに関する記事を参照してください。
継承階層
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
検索するリスト要素の 0 から始まるインデックス。
戻り値
反復処理またはオブジェクト ポインターの取得に使用できる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
またはメンバー関数呼び出しによって返されるPOSITION
値Find
。
戻り値
GetHead
の戻り値の説明を参照してください。
解説
インデックスと同じではなく、 POSITION
値を自分で操作することはできません。 GetAt
は、特定の位置に関連付けられている CObject
ポインターを取得します。
POSITION
値がリスト内の有効な位置を表していることを確認する必要があります。 無効な場合は、Microsoft Foundation クラス ライブラリのデバッグ バージョンがアサートされます。
次の表に、 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 Foundation クラス ライブラリのデバッグ バージョンがアサートされます。 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 Foundation クラス ライブラリのデバッグ バージョンがアサートされます。
取得した要素がリストの最後の要素である場合、 rPosition
の新しい値は NULL
に設定されます。
イテレーション中に要素を削除できます。 RemoveAt
の例を参照してください。
Note
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 Foundation クラス ライブラリのデバッグ バージョンがアサートされます。
取得した要素がリストの最初の要素である場合、 rPosition
の新しい値は NULL
に設定されます。
Note
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 Foundation クラス ライブラリのデバッグ バージョンがアサートされます。 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
前のGetNext
、GetPrev
、またはメンバー関数呼び出しによって返されるPOSITION
値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
前のGetNext
、GetPrev
、またはメンバー関数呼び出しによって返されるPOSITION
値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 以外。それ以外の場合は 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 Foundation クラス ライブラリのデバッグ バージョンがアサートされます。
次の表に、 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 Foundation クラス ライブラリのデバッグ バージョンがアサートされます。 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 Foundation クラス ライブラリのデバッグ バージョンがアサートされます。 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 Foundation クラス ライブラリのデバッグ バージョンがアサートされます。
次の表に、 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