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の詳細については、コレクションに関する記事を参照してください。

継承階層

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 単位で割り当てられます。 メモリ割り当てが失敗すると、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
POSITIONGetHeadPositionの関数呼び出しまたは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 CObListGetHead ポインターを CObject 返します。 これにより、関数を代入ステートメントの右側でのみ使用できるため、リストを変更から保護できます。

リストに直接アクセスするか、ポインターを介してアクセスする場合は CObListGetHead ポインターへの参照を 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
GetNextGetHeadPositionの、または他のPOSITIONメンバー関数呼び出しによって返される値への参照。

戻り値

の戻り値の説明を GetHead参照してください。

解説

への呼び出しGetHeadPositionFindで最初の位置を確立する場合は、前方反復ループで使用GetNextできます。

値がリスト内の有効な位置を表していることを POSITION 確認する必要があります。 無効な場合は、Microsoft Foundation クラス ライブラリのデバッグ バージョンがアサートされます。

取得した要素がリストの最後の要素である場合、新しい値 rPositionNULL.

イテレーション中に要素を削除できます。 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参照してください。

解説

への呼び出しGetTailPositionFindで初期位置を確立する場合は、逆反復ループで使用GetPrevできます。

値がリスト内の有効な位置を表していることを POSITION 確認する必要があります。 無効な場合は、Microsoft Foundation クラス ライブラリのデバッグ バージョンがアサートされます。

取得した要素がリストの最初の要素である場合、新しい値 rPositionNULL.

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
GetNextPOSITIONGetPrevまたは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
GetNextPOSITIONGetPrevまたは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 );

リストの反復処理中に要素を削除するときは注意してください。 次の例は、有効な POSITIONGetNextを保証する削除手法を示しています。

クラスの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 クラス