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
マクロが組み込まれており、その要素のシリアル化とダンプがサポートされます。 ポインターの CObject
リストが、オーバーロードされた挿入演算子または Serialize
メンバー関数を使用してアーカイブに格納されている場合、各 CObject
要素が順番にシリアル化されます。
リスト内の個々 CObject
の要素のダンプが必要な場合は、ダンプ コンテキストの深さを 1 以上に設定する必要があります。
オブジェクトが CObList
削除されたとき、またはその要素が削除されると、ポインターのみが CObject
削除され、参照するオブジェクトは削除されません。
から独自のクラス CObList
を派生させることができます。 派生オブジェクトへのポインターを保持するように設計された CObject
新しいリスト クラスは、新しいデータ メンバーと新しいメンバー関数を追加します。 結果のリストは、ポインターを挿入 CObject
できるため、厳密には型セーフではないことに注意してください。
Note
リストを 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
単位で割り当てられます。 メモリ割り当てが失敗すると、a CMemoryException
がスローされます。
次の表に、次のような他のメンバー関数を CObList::CObList
示します。
クラス | メンバー関数 |
---|---|
CPtrList |
CPtrList( INT_PTR nBlockSize = 10 ); |
CStringList |
CStringList( INT_PTR nBlockSize = 10 ); |
例
すべてのコレクションの CObject
例で使用される -derived クラス 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
検索するリスト要素の 0 から始まるインデックス。
戻り値
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 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
識別されるリスト要素を取得し、リスト内のPOSITION
次のエントリの値に設定rPosition
します。
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 CObject*&
、このメソッドの const バージョンは 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
識別されるリスト要素を取得し、リスト内のPOSITION
前のエントリの値に設定rPosition
します。
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 CObject*&
、このメソッドの const バージョンは 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
のPOSITION
、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
前GetNext
のPOSITION
、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 以外。それ以外の場合は 0。
次の表に、次のような他のメンバー関数を CObList::IsEmpty
示します。
クラス | メンバー関数 |
---|---|
CPtrList |
BOOL IsEmpty( ) const; |
CStringList |
BOOL IsEmpty( ) const; |
例
RemoveAll
の例を参照してください。
CObList::RemoveAll
このリストからすべての要素を削除し、関連付けられている CObList
メモリを解放します。
void RemoveAll();
解説
リストが既に空の場合、エラーは生成されません。
要素を a から 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
リストから削除する要素の位置。
解説
要素を a から CObList
削除すると、リストからオブジェクト ポインターが削除されます。 オブジェクト自体を削除するのはユーザーの責任です。
値がリスト内の有効な位置を表していることを POSITION
確認する必要があります。 無効な場合は、Microsoft Foundation クラス ライブラリのデバッグ バージョンがアサートされます。
次の表に、次のような他のメンバー関数を 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 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
関連項目
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示