CList
クラス
オブジェクト (重複あり) を順に並べたリストをサポートします。このリストには、シーケンシャル アクセスまたは値指定によるアクセスを行うことができます。
構文
template<class TYPE, class ARG_TYPE = const TYPE&>
class CList : public CObject
メンバー
パブリック コンストラクター
名前 | 説明 |
---|---|
CList::CList |
空の順序付きリストを構築します。 |
パブリック メソッド
名前 | 説明 |
---|---|
CList::AddHead |
要素 (または別のリスト内のすべての要素) をリストの先頭に追加します (新しい先頭を作成します)。 |
CList::AddTail |
リストの末尾に要素 (または別のリストのすべての要素) を追加します (新しい末尾を作成します)。 |
CList::Find |
ポインター値で指定された要素の位置を取得します。 |
CList::FindIndex |
0 から始まるインデックスで指定された要素の位置を取得します。 |
CList::GetAt |
指定した位置にある要素を取得します。 |
CList::GetCount |
このリスト内の要素の数を返します。 |
CList::GetHead |
リストのヘッド要素を返します (空にすることはできません)。 |
CList::GetHeadPosition |
リストのヘッド要素の位置を返します。 |
CList::GetNext |
次に反復処理の対象となる要素が取得されます。 |
CList::GetPrev |
反復する前の要素を取得します。 |
CList::GetSize |
このリスト内の要素の数を返します。 |
CList::GetTail |
リストの末尾要素を返します (空にすることはできません)。 |
CList::GetTailPosition |
リストの末尾要素の位置を返します。 |
CList::InsertAfter |
指定した位置の後に新しい要素を挿入します。 |
CList::InsertBefore |
指定した位置の前に新しい要素を挿入します。 |
CList::IsEmpty |
空のリスト条件 (要素なし) をテストします。 |
CList::RemoveAll |
このリストからすべての要素を削除します。 |
CList::RemoveAt |
位置で指定された要素をこのリストから削除します。 |
CList::RemoveHead |
リストの先頭から要素を削除します。 |
CList::RemoveTail |
リストの末尾から要素を削除します。 |
CList::SetAt |
特定の位置に要素を設定します。 |
パラメーター
TYPE
リストに格納されているオブジェクトの種類。
ARG_TYPE
リストに格納されているオブジェクトを参照するために使用される型。 参照を指定できます。
解説
CList
リストは、二重にリンクされたリストのように動作します。
型 POSITION
の変数は、リストのキーです。 変数を POSITION
反復子として使用して、リストを順番に走査したり、場所を保持するブックマークとして使用したりできます。 ただし、位置はインデックスと同じではありません。
要素の挿入は、リストヘッド、テール、既知 POSITION
の位置で非常に高速です。 要素を値またはインデックスで検索するには、シーケンシャル検索が必要です。 リストが長い場合、この検索は遅くなる可能性があります。
リスト内の個々の要素のダンプが必要な場合は、ダンプ コンテキストの深さを 1 以上に設定する必要があります。
このクラスの特定のメンバー関数は、クラスのほとんどの用途に合わせてカスタマイズする必要があるグローバル ヘルパー関数を CList
呼び出します。 「マクロとグローバル」セクションのコレクション クラス ヘルパーを参照してください。
使用CList
の詳細については、コレクションに関する記事を参照してください。
例
// CList is a template class that takes two template arguments.
// The first argument is type stored internally by the list, the
// second argument is the type used in the arguments for the
// CList methods.
// This code defines a list of ints.
CList<int, int> myIntList;
// This code defines a list of CStrings
CList<CString, CString &> myStringList;
// This code defines a list of MYTYPEs,
// NOTE: MYTYPE could be any struct, class or type definition
CList<MYTYPE, MYTYPE &> myTypeList;
継承階層
CList
必要条件
ヘッダー:afxtempl.h
CList::AddHead
このリストの先頭に新しい要素または要素のリストを追加します。
POSITION AddHead(ARG_TYPE newElement);
void AddHead(CList* pNewList);
パラメーター
ARG_TYPE
一覧の要素の型を指定するテンプレート パラメーター (参照を使用できます)。
newElement
新しい要素。
pNewList
別 CList
のリストへのポインター。 このリストに pNewList
要素が追加されます。
戻り値
最初のバージョンでは、 POSITION
新しく挿入された要素の値が返されます。
解説
操作の前にリストを空にすることができます。
例
// Declarations of the variables used in the example
CList<CString, CString &> myList;
CList<CString, CString &> myList2;
// There are two versions of CList::AddHead: one adds a single
// element to the front of the list, the second adds another list
// to the front.
// This adds the string "ABC" to the front of myList.
// myList is a list of CStrings (ie defined as CList<CString,CString&>).
myList.AddHead(CString(_T("ABC")));
// This adds the elements of myList2 to the front of myList.
myList.AddHead(&myList2);
CList::AddTail
このリストの末尾に新しい要素または要素のリストを追加します。
POSITION AddTail(ARG_TYPE newElement);
void AddTail(CList* pNewList);
パラメーター
ARG_TYPE
一覧の要素の型を指定するテンプレート パラメーター (参照を使用できます)。
newElement
この一覧に追加する要素。
pNewList
別 CList
のリストへのポインター。 このリストに pNewList
要素が追加されます。
戻り値
最初のバージョンでは、 POSITION
新しく挿入された要素の値が返されます。
解説
操作の前にリストを空にすることができます。
例
// Define myList and myList2.
CList<CString, CString &> myList;
CList<CString, CString &> myList2;
// Add elements to the end of myList and myList2.
myList.AddTail(CString(_T("A")));
myList.AddTail(CString(_T("B")));
myList2.AddTail(CString(_T("C")));
myList2.AddTail(CString(_T("D")));
// There are two versions of CList::AddTail: one adds a single
// element to the end of the list, the second adds another list
// to the end.
// This adds the string "ABC" to the end of myList.
// myList is a list of CStrings (ie defined as CList<CString,CString&>).
myList.AddTail(CString(_T("ABC")));
ASSERT(CString(_T("ABC")) == myList.GetTail());
// This adds the elements of myList2 to the end of myList.
myList.AddTail(&myList2);
CList::CList
空の順序付きリストを構築します。
CList(INT_PTR nBlockSize = 10);
パラメーター
nBlockSize
リストを拡張するためのメモリ割り当ての粒度。
解説
一覧が大きくなると、メモリはエントリの nBlockSize
単位で割り当てられます。
例
// This code defines myList as a list of strings
// such that memory gets allocated in chunks of
// 16 strings.
CList<CString, CString &> myList(16);
// This code defines myList2 as a list of ints
// such that memory gets allocated in chunks of
// 128 ints.
CList<int, int> myList2(128);
CList::Find
リストを順番に検索して、指定された要素に一致する最初の要素を検索します searchValue
。
POSITION Find(
ARG_TYPE searchValue,
POSITION startAfter = NULL) const;
パラメーター
ARG_TYPE
一覧の要素の型を指定するテンプレート パラメーター (参照を使用できます)。
searchValue
リスト内で見つかる値。
startAfter
検索の開始位置。 値が指定されていない場合、検索は先頭の要素から検索が開始されます。
戻り値
POSITION
オブジェクトが見つからない場合は、反復またはオブジェクト ポインターの取得NULL
に使用できる値。
例
// Define myList.
CList<CString, CString &> myList;
// Add three elements to the list.
myList.AddHead(CString(_T("XYZ")));
myList.AddHead(CString(_T("ABC")));
myList.AddHead(CString(_T("123")));
// Find a specific element.
POSITION pos = myList.Find(CString(_T("XYZ")));
ASSERT(CString(_T("XYZ")) == myList.GetAt(pos));
CList::FindIndex
リストのインデックスとして値 nIndex
を使用します。
POSITION FindIndex(INT_PTR nIndex) const;
パラメーター
nIndex
検索するリスト要素の 0 から始まるインデックス。
戻り値
POSITION
反復またはオブジェクト ポインターの取得NULL
に使用できる値。負の値または大きすぎる場合nIndex
。
解説
リストの先頭からシーケンシャル スキャンを開始し、n番目の要素で停止します。
例
// Define myList.
CList<CString, CString &> myList;
// Add three elements to the list.
myList.AddTail(CString(_T("XYZ")));
myList.AddTail(CString(_T("ABC")));
myList.AddTail(CString(_T("123")));
// Verify the first element (index 0).
ASSERT(CString(_T("XYZ")) == myList.GetAt(myList.FindIndex(0)));
// Verify the third element (index 2).
ASSERT(CString(_T("123")) == myList.GetAt(myList.FindIndex(2)));
CList::GetAt
指定した位置にある list 要素を取得します。
TYPE& GetAt(POSITION position);
const TYPE& GetAt(POSITION position) const;
パラメーター
TYPE
リスト内のオブジェクトの種類を指定するテンプレート パラメーター。
position
取得する要素のリスト内の位置。
戻り値
の戻り値の説明を GetHead
参照してください。
解説
GetAt
は、特定の位置に関連付けられている要素 (または要素への参照) を返します。 インデックスと同じではなく、自分で値を POSITION
操作することはできません。 型 POSITION
の変数は、リストのキーです。
値がリスト内の有効な位置を表していることを POSITION
確認する必要があります。 無効な場合は、Microsoft Foundation クラス ライブラリのデバッグ バージョンがアサートされます。
例
CList::GetHeadPosition
の例を参照してください。
CList::GetCount
このリスト内の要素の数を取得します。
INT_PTR GetCount() const;
戻り値
要素数を含む整数値。
解説
このメソッドを呼び出すと、メソッドと同じ結果が CList::GetSize
生成されます。
例
CList::RemoveHead
の例を参照してください。
CList::GetHead
このリストのヘッド要素 (またはヘッド要素への参照) を取得します。
const TYPE& GetHead() const;
TYPE& GetHead();
パラメーター
TYPE
リスト内のオブジェクトの種類を指定するテンプレート パラメーター。
戻り値
リストが const
の場合、GetHead
は、リストの先頭にある要素のコピーを返します。 これにより、関数は代入ステートメントの右側でのみ使用でき、リストが変更されないように保護されます。
リストが const
ではない場合、GetHead
は、リストの先頭にある要素への参照を返します。 これにより、代入ステートメントの両側で関数を使用できるため、リスト エントリを変更できます。
解説
呼び出す GetHead
前に、リストが空でないことを確認する必要があります。 リストが空の場合、Microsoft Foundation クラス ライブラリのデバッグ バージョンがアサートされます。 リストに要素が含まれていることを確認するために使用 IsEmpty
します。
例
// Define myList.
CList<CString, CString &> myList;
// Add an element to the front of the list.
myList.AddHead(CString(_T("ABC")));
// Verify the element was added to the front of the list.
ASSERT(CString(_T("ABC")) == myList.GetHead());
CList::GetHeadPosition
このリストのヘッド要素の位置を取得します。
POSITION GetHeadPosition() const;
戻り値
POSITION
繰り返しまたはオブジェクト ポインターの取得NULL
に使用できる値。リストが空の場合。
例
// Define myList.
CList<CString, CString &> myList;
// Add an element to the front of the list.
myList.AddHead(CString(_T("ABC")));
// Verify the element at the head position
// is the one added.
POSITION pos = myList.GetHeadPosition();
ASSERT(CString(_T("ABC")) == myList.GetAt(pos));
CList::GetNext
でrPosition
識別されるリスト要素を取得し、リスト内のPOSITION
次のエントリの値に設定rPosition
します。
TYPE& GetNext(POSITION& rPosition);
const TYPE& GetNext(POSITION& rPosition) const;
パラメーター
TYPE
リスト内の要素の型を指定するテンプレート パラメーター。
rPosition
前GetNext
GetHeadPosition
の、または他のPOSITION
メンバー関数呼び出しによって返される値への参照。
戻り値
リストが const
の場合、GetNext
はリスト内の要素のコピーを返します。 これにより、関数は代入ステートメントの右側でのみ使用でき、リストが変更されないように保護されます。
リストが const
でない場合、GetNext
はリスト内の要素への参照を返します。 これにより、代入ステートメントの両側で関数を使用できるため、リスト エントリを変更できます。
解説
への呼び出しGetHeadPosition
Find
で最初の位置を確立する場合は、前方反復ループで使用GetNext
できます。
値がリスト内の有効な位置を表していることを POSITION
確認する必要があります。 無効な場合は、Microsoft Foundation クラス ライブラリのデバッグ バージョンがアサートされます。
取得した要素がリストの最後の要素である場合、新しい値 rPosition
は NULL に設定されます。
例
// Define myList.
// Define myList.
CList<CString, CString &> myList;
// Add two elements to the list.
myList.AddHead(CString(_T("ABC")));
myList.AddHead(CString(_T("123")));
// Dump the list elements to the debug window.
POSITION pos = myList.GetHeadPosition();
for (int i = 0; i < myList.GetCount(); i++)
{
TRACE(_T("%s\r\n"), (LPCTSTR)myList.GetNext(pos));
}
CList::GetPrev
でrPosition
識別されるリスト要素を取得し、リスト内のPOSITION
前のエントリの値に設定rPosition
します。
TYPE& GetPrev(POSITION& rPosition);
const TYPE& GetPrev(POSITION& rPosition) const;
パラメーター
TYPE
リスト内の要素の型を指定するテンプレート パラメーター。
rPosition
前GetPrev
または他のPOSITION
メンバー関数呼び出しによって返される値への参照。
戻り値
リストが const
の場合、GetPrev
は、リストの先頭にある要素のコピーを返します。 これにより、関数は代入ステートメントの右側でのみ使用でき、リストが変更されないように保護されます。
リストが const
でない場合、GetPrev
はリスト内の要素への参照を返します。 これにより、代入ステートメントの両側で関数を使用できるため、リスト エントリを変更できます。
解説
への呼び出しGetTailPosition
Find
で初期位置を確立する場合は、逆反復ループで使用GetPrev
できます。
値がリスト内の有効な位置を表していることを POSITION
確認する必要があります。 無効な場合は、Microsoft Foundation クラス ライブラリのデバッグ バージョンがアサートされます。
取得した要素がリストの最初の要素である場合、新しい値 rPosition
は NULL
.
例
// Define myList.
CList<CString,CString&> myList;
// Add two elements to the list.
myList.AddHead(CString(_T("ABC")));
myList.AddHead(CString(_T("123")));
// Dump the list elements to the debug window,
// in reverse order.
POSITION pos = myList.GetTailPosition();
for (int i = 0; i < myList.GetCount(); i++)
{
TRACE(_T("%s\r\n"), (LPCTSTR)myList.GetPrev(pos));
}
CList::GetSize
リスト要素の数を返します。
INT_PTR GetSize() const;
戻り値
リスト内の項目数。
解説
リスト内の要素の数を取得するには、このメソッドを呼び出します。 このメソッドを呼び出すと、メソッドと同じ結果が CList::GetCount
生成されます。
例
// Define myList.
CList<CString, CString &> myList;
// Add two elements to the list.
myList.AddHead(CString(_T("ABC")));
myList.AddHead(CString(_T("123")));
// Remove the head element and verify the list.
// NOTE: once the head is removed, the number of
// elements in the list will be one.
CString strHead = myList.RemoveHead();
ASSERT((CString(_T("123")) == strHead) && (myList.GetSize() == 1) &&
(CString(_T("ABC")) == myList.GetHead()));
CList::GetTail
このリストの CObject
末尾要素を表すポインターを取得します。
TYPE& GetTail();
const TYPE& GetTail() const;
パラメーター
TYPE
リスト内の要素の型を指定するテンプレート パラメーター。
戻り値
の戻り値の説明を GetHead
参照してください。
解説
呼び出す GetTail
前に、リストが空でないことを確認する必要があります。 リストが空の場合、Microsoft Foundation クラス ライブラリのデバッグ バージョンがアサートされます。 リストに要素が含まれていることを確認するために使用 IsEmpty
します。
例
// Define myList.
CList<CString, CString &> myList;
// Add an element to the end of the list.
myList.AddTail(CString(_T("ABC")));
// Verify the element was added to the end of the list.
ASSERT(CString(_T("ABC")) == myList.GetTail());
CList::GetTailPosition
このリストの tail 要素の位置を取得します。 NULL
リストが空の場合は 。
POSITION GetTailPosition() const;
戻り値
POSITION
繰り返しまたはオブジェクト ポインターの取得NULL
に使用できる値。リストが空の場合。
例
// Define myList.
CList<CString,CString&> myList;
// Add an element to the end of the list.
myList.AddTail(CString(_T("ABC")));
// Verify the element at the end position
// is the one added.
POSITION pos = myList.GetTailPosition();
ASSERT(CString(_T("ABC")) == myList.GetAt(pos));
CList::InsertAfter
指定した位置の要素の後に、このリストに要素を追加します。
POSITION InsertAfter(POSITION position, ARG_TYPE newElement);
パラメーター
position
前 GetNext
の、 GetPrev
または Find
メンバー関数呼び出しによって返される POSITION 値。
ARG_TYPE
list 要素の型を指定するテンプレート パラメーター。
newElement
この一覧に追加する要素。
戻り値
POSITION
反復処理またはリスト要素の取得に使用できる値。
例
// Define myList.
CList<CString, CString &> myList;
// Add three elements to the list.
POSITION pos = myList.AddHead(CString(_T("XYZ")));
pos = myList.InsertAfter(pos, CString(_T("ABC")));
pos = myList.InsertAfter(pos, CString(_T("123")));
// Verify the tail element is what's expected.
ASSERT(CString(_T("123")) == myList.GetTail());
CList::InsertBefore
一覧の指定した位置にある要素の前に要素を追加します。
POSITION InsertBefore(POSITION position, ARG_TYPE newElement);
パラメーター
position
前GetNext
のPOSITION
、GetPrev
またはFind
メンバー関数呼び出しによって返される値。
ARG_TYPE
一覧の要素の型を指定するテンプレート パラメーター (参照を使用できます)。
newElement
この一覧に追加する要素。
戻り値
POSITION
反復処理またはリスト要素の取得に使用できる値。
解説
ある場合 position
、 NULL
要素はリストの先頭に挿入されます。
例
// Define myList.
CList<CString, CString &> myList;
// Add three elements to the list.
POSITION pos = myList.AddHead(CString(_T("XYZ")));
pos = myList.InsertBefore(pos, CString(_T("ABC")));
pos = myList.InsertBefore(pos, CString(_T("123")));
// Verify the head element is what's expected.
ASSERT(CString(_T("123")) == myList.GetHead());
CList::IsEmpty
このリストに要素が含まれているかどうかを示します。
BOOL IsEmpty() const;
戻り値
このリストが空の場合は 0 以外。それ以外の場合は 0。
例
// Define myList.
CList<CString, CString &> myList;
// Add three elements to the list.
myList.AddTail(CString(_T("XYZ")));
myList.AddTail(CString(_T("ABC")));
myList.AddTail(CString(_T("123")));
// Remove the head element until the list is empty.
CString str;
while (!myList.IsEmpty())
{
str = myList.RemoveHead();
TRACE(_T("%s\r\n"), (LPCTSTR)str);
}
CList::RemoveAll
このリストからすべての要素を削除し、関連付けられているメモリを解放します。
void RemoveAll();
解説
リストが既に空の場合、エラーは生成されません。
例
// Define myList.
CList<CString, CString&> myList;
// Add three elements to the list.
myList.AddTail(CString(_T("XYZ")));
myList.AddTail(CString(_T("ABC")));
myList.AddTail(CString(_T("123")));
// Remove all of the elements in the list.
myList.RemoveAll();
// Verify the list is empty.
ASSERT(myList.IsEmpty());
CList::RemoveAt
指定した要素をこのリストから削除します。
void RemoveAt(POSITION position);
パラメーター
position
リストから削除する要素の位置。
解説
値がリスト内の有効な位置を表していることを POSITION
確認する必要があります。 無効な場合は、Microsoft Foundation クラス ライブラリのデバッグ バージョンがアサートされます。
例
// Define myList.
CList<CString, CString&> myList;
// Add three elements to the list.
myList.AddTail(CString(_T("XYZ")));
myList.AddTail(CString(_T("ABC")));
myList.AddTail(CString(_T("123")));
// Remove CString("ABC") from the list.
myList.RemoveAt(myList.FindIndex(1));
// Verify CString("ABC") is not in the list.
ASSERT(myList.Find(CString(_T("ABC"))) == NULL);
CList::RemoveHead
リストの先頭から要素を削除し、その要素へのポインターを返します。
TYPE RemoveHead();
パラメーター
TYPE
リスト内の要素の型を指定するテンプレート パラメーター。
戻り値
以前にリストの先頭にある要素。
解説
呼び出す RemoveHead
前に、リストが空でないことを確認する必要があります。 リストが空の場合、Microsoft Foundation クラス ライブラリのデバッグ バージョンがアサートされます。 リストに要素が含まれていることを確認するために使用 IsEmpty
します。
例
// Define myList.
CList<CString, CString&> myList;
// Add two elements to the list.
myList.AddHead(CString(_T("ABC")));
myList.AddHead(CString(_T("123")));
// Remove the head element and verify the list.
// NOTE: once the head is removed, the number of
// elements in the list will be one.
CString strHead = myList.RemoveHead();
ASSERT((CString(_T("123")) == strHead) && (myList.GetCount() == 1) &&
(CString(_T("ABC")) == myList.GetHead()));
CList::RemoveTail
リストの末尾から要素を削除し、その要素へのポインターを返します。
TYPE RemoveTail();
パラメーター
TYPE
リスト内の要素の型を指定するテンプレート パラメーター。
戻り値
リストの末尾にあった要素。
解説
呼び出す RemoveTail
前に、リストが空でないことを確認する必要があります。 リストが空の場合、Microsoft Foundation クラス ライブラリのデバッグ バージョンがアサートされます。 リストに要素が含まれていることを確認するために使用 IsEmpty
します。
例
// Define myList.
CList<CString, CString &> myList;
// Add two elements to the list.
myList.AddTail(CString(_T("ABC")));
myList.AddTail(CString(_T("123")));
// Remove the tail element and verify the list.
// NOTE: once the tail is removed, the number of
// elements in the list will be one.
CString strTail = myList.RemoveTail();
ASSERT((CString(_T("123")) == strTail) && (myList.GetCount() == 1) &&
(CString(_T("ABC")) == myList.GetTail()));
CList::SetAt
型 POSITION
の変数は、リストのキーです。
void SetAt(POSITION pos, ARG_TYPE newElement);
パラメーター
pos
POSITION
設定する要素の値。
ARG_TYPE
一覧の要素の型を指定するテンプレート パラメーター (参照を使用できます)。
newElement
リストに追加する要素。
解説
インデックスと同じではなく、自分で値を POSITION
操作することはできません。 SetAt
は、リスト内の指定した位置に要素を書き込みます。
値がリスト内の有効な位置を表していることを POSITION
確認する必要があります。 無効な場合は、Microsoft Foundation クラス ライブラリのデバッグ バージョンがアサートされます。
例
// Define myList.
CList<CString, CString &> myList;
// Add three elements to the list.
myList.AddTail(CString(_T("XYZ")));
myList.AddTail(CString(_T("ABC")));
myList.AddTail(CString(_T("123")));
// Replace CString("ABC") with CString("CBA")
POSITION pos = myList.Find(CString(_T("ABC")));
myList.SetAt(pos, CString(_T("CBA")));
// Verify CString("ABC") is not in the list.
ASSERT(myList.Find(CString(_T("ABC"))) == NULL);
関連項目
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示