次の方法で共有


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に関する記事を参照してください。

継承階層

CObject

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 );

すべてのコレクション例で使用CAgeCObject派生クラスの一覧を次に示します。

// 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またはメンバー関数呼び出しによって返されるPOSITIONFind

戻り値

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へのポインターを介してアクセスされた場合、 GetHeadCObject ポインターを返します。 これにより、関数を代入ステートメントの右側でのみ使用できるため、リストを変更から保護できます。

リストに直接アクセスするか、 CObListへのポインターを介してアクセスする場合、 GetHeadCObject ポインターへの参照を返します。 これにより、代入ステートメントの両側で関数を使用できるため、リスト エントリを変更できます。

解説

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
前のGetNextGetHeadPosition、またはその他のメンバー関数呼び出しによって返される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
前のGetNextGetPrev、またはメンバー関数呼び出しによって返されるPOSITIONFind

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
前のGetNextGetPrev、またはメンバー関数呼び出しによって返されるPOSITIONFind

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

関連項目

CObject クラス
階層図
CStringList クラス
CPtrList クラス