Sdílet prostřednictvím


CList Třída

Podporuje uspořádané seznamy neunique objektů, které jsou přístupné postupně nebo podle hodnoty.

Syntaxe

template<class TYPE, class ARG_TYPE = const TYPE&>
class CList : public CObject

Členové

Veřejné konstruktory

Název Popis
CList::CList Vytvoří prázdný seřazený seznam.

Veřejné metody

Název Popis
CList::AddHead Přidá prvek (nebo všechny prvky v jiném seznamu) do hlavy seznamu (vytvoří novou hlavu).
CList::AddTail Přidá prvek (nebo všechny prvky v jiném seznamu) na konec seznamu (vytvoří nový ocas).
CList::Find Získá pozici prvku určeného hodnotou ukazatele.
CList::FindIndex Získá pozici prvku určeného indexem založeným na nule.
CList::GetAt Získá prvek na dané pozici.
CList::GetCount Vrátí počet prvků v tomto seznamu.
CList::GetHead Vrátí hlavní prvek seznamu (nesmí být prázdný).
CList::GetHeadPosition Vrátí pozici hlavního prvku seznamu.
CList::GetNext Získá další prvek pro iterování.
CList::GetPrev Získá předchozí prvek pro iterování.
CList::GetSize Vrátí počet prvků v tomto seznamu.
CList::GetTail Vrátí zadní prvek seznamu (nesmí být prázdný).
CList::GetTailPosition Vrátí pozici koncového prvku seznamu.
CList::InsertAfter Vloží nový prvek za danou pozici.
CList::InsertBefore Vloží nový prvek před danou pozici.
CList::IsEmpty Testuje prázdnou podmínku seznamu (žádné prvky).
CList::RemoveAll Odebere všechny prvky z tohoto seznamu.
CList::RemoveAt Odebere prvek z tohoto seznamu určený pozicí.
CList::RemoveHead Odebere prvek z hlavy seznamu.
CList::RemoveTail Odebere prvek z konce seznamu.
CList::SetAt Nastaví prvek na dané pozici.

Parametry

TYPE
Typ objektu uloženého v seznamu

ARG_TYPE
Typ použitý k odkaz na objekty uložené v seznamu. Může to být odkaz.

Poznámky

CList seznamy se chovají jako seznamy propojené doubly.

Proměnná typu POSITION je klíčem pro seznam. Proměnnou POSITION můžete použít jako iterátor k postupnému procházení seznamu a záložky pro uložení místa. Pozice ale není stejná jako index.

Vložení prvku je velmi rychlé v hlavě seznamu, na chvostu a ve známém POSITION. Sekvenční vyhledávání je nezbytné k vyhledání prvku podle hodnoty nebo indexu. Toto hledání může být pomalé, pokud je seznam dlouhý.

Pokud potřebujete výpis jednotlivých prvků v seznamu, musíte nastavit hloubku kontextu výpisu na hodnotu 1 nebo vyšší.

Některé členské funkce této třídy volají globální pomocné funkce, které musí být přizpůsobeny pro většinu použití CList třídy. Viz Pomocné rutiny tříd kolekcí v části Makra a globální hodnoty.

Další informace o použití CListnaleznete v článku Kolekce.

Příklad

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

Hierarchie dědičnosti

CObject

CList

Požadavky

Záhlaví: afxtempl.h

CList::AddHead

Přidá nový prvek nebo seznam prvků do hlavy tohoto seznamu.

POSITION AddHead(ARG_TYPE newElement);
void AddHead(CList* pNewList);

Parametry

ARG_TYPE
Parametr šablony určující typ prvku seznamu (může být odkaz).

newElement
Nový prvek.

pNewList
Ukazatel na jiný CList seznam. Prvky v pNewList tomto seznamu budou přidány.

Návratová hodnota

První verze vrátí POSITION hodnotu nově vloženého prvku.

Poznámky

Seznam může být před operací prázdný.

Příklad

// 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

Přidá nový prvek nebo seznam prvků na konec tohoto seznamu.

POSITION AddTail(ARG_TYPE newElement);
void AddTail(CList* pNewList);

Parametry

ARG_TYPE
Parametr šablony určující typ prvku seznamu (může být odkaz).

newElement
Prvek, který se má přidat do tohoto seznamu.

pNewList
Ukazatel na jiný CList seznam. Prvky v pNewList tomto seznamu budou přidány.

Návratová hodnota

První verze vrátí POSITION hodnotu nově vloženého prvku.

Poznámky

Seznam může být před operací prázdný.

Příklad

// 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

Vytvoří prázdný seřazený seznam.

CList(INT_PTR nBlockSize = 10);

Parametry

nBlockSize
Členitost přidělení paměti pro rozšíření seznamu.

Poznámky

S rostoucím seznamem se paměť přiděluje v jednotkách nBlockSize položek.

Příklad

// 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

Vyhledá seznam postupně a vyhledá první prvek odpovídající zadanému searchValue.

POSITION Find(
    ARG_TYPE searchValue,
    POSITION startAfter = NULL) const;

Parametry

ARG_TYPE
Parametr šablony určující typ prvku seznamu (může být odkaz).

searchValue
Hodnota, která se má najít v seznamu.

startAfter
Počáteční pozice hledání. Pokud není zadána žádná hodnota, hledání začíná hlavním prvkem.

Návratová hodnota

Hodnota POSITION , kterou lze použít pro iteraci nebo načtení ukazatele objektu; NULL pokud objekt nebyl nalezen.

Příklad

// 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

Použije hodnotu nIndex jako index do seznamu.

POSITION FindIndex(INT_PTR nIndex) const;

Parametry

nIndex
Index prvku seznamu založený na nule, který se má najít.

Návratová hodnota

Hodnota POSITION , kterou lze použít pro iteraci nebo načtení ukazatele objektu; NULL pokud nIndex je záporná nebo příliš velká.

Poznámky

Spustí sekvenční skenování z hlavy seznamu a zastaví se na n-thprvku.

Příklad

// 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

Získá prvek seznamu na dané pozici.

TYPE& GetAt(POSITION position);
const TYPE& GetAt(POSITION position) const;

Parametry

TYPE
Parametr šablony určující typ objektu v seznamu.

position
Pozice v seznamu elementu, který chcete získat.

Návratová hodnota

Podívejte se na popis návratové hodnoty pro GetHead.

Poznámky

GetAt vrátí prvek (nebo odkaz na prvek) přidružený k dané pozici. Není to stejné jako index a nemůžete pracovat s POSITION hodnotou sami. Proměnná typu POSITION je klíčem pro seznam.

Je nutné zajistit, aby hodnota POSITION představovala platnou pozici v seznamu. Pokud je neplatná, pak ladicí verze knihovny tříd Microsoft Foundation asserts.

Příklad

Podívejte se na příklad pro CList::GetHeadPosition.

CList::GetCount

Získá počet prvků v tomto seznamu.

INT_PTR GetCount() const;

Návratová hodnota

Celočíselná hodnota obsahující počet prvků.

Poznámky

Voláním této metody se vygeneruje stejný výsledek jako metoda CList::GetSize .

Příklad

Podívejte se na příklad pro CList::RemoveHead.

CList::GetHead

Získá hlavní prvek (nebo odkaz na hlavní prvek) tohoto seznamu.

const TYPE& GetHead() const;

TYPE& GetHead();

Parametry

TYPE
Parametr šablony určující typ objektu v seznamu.

Návratová hodnota

Pokud je constseznam , GetHead vrátí kopii prvku v záhlaví seznamu. To umožňuje, aby funkce byla použita pouze na pravé straně příkazu přiřazení a chrání seznam před úpravami.

Pokud seznam není const, GetHead vrátí odkaz na prvek v záhlaví seznamu. To umožňuje, aby se funkce používala na obou stranách příkazu přiřazení, a tím umožňuje úpravu položek seznamu.

Poznámky

Před voláním GetHeadje nutné zajistit, aby seznam nebyl prázdný . Pokud je seznam prázdný, pak ladicí verze knihovny tříd Microsoft Foundation se uplatní. Slouží IsEmpty k ověření, zda seznam obsahuje prvky.

Příklad

// 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

Získá pozici hlavního prvku tohoto seznamu.

POSITION GetHeadPosition() const;

Návratová hodnota

Hodnota POSITION , kterou lze použít pro iteraci nebo načtení ukazatele objektu; NULL pokud je seznam prázdný.

Příklad

// 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

Získá prvek seznamu identifikovaný rPosition, pak nastaví rPosition na POSITION hodnotu další položky v seznamu.

TYPE& GetNext(POSITION& rPosition);
const TYPE& GetNext(POSITION& rPosition) const;

Parametry

TYPE
Parametr šablony určující typ prvků v seznamu

rPosition
Odkaz na POSITION hodnotu vrácenou předchozím GetNextvoláním funkce , GetHeadPositionnebo jiné členské funkce.

Návratová hodnota

Pokud je constseznam , GetNext vrátí kopii prvku seznamu. To umožňuje, aby funkce byla použita pouze na pravé straně příkazu přiřazení a chrání seznam před úpravami.

Pokud seznam není const, GetNext vrátí odkaz na prvek seznamu. To umožňuje, aby se funkce používala na obou stranách příkazu přiřazení, a tím umožňuje úpravu položek seznamu.

Poznámky

Můžete použít GetNext ve smyčce přesměrování iterace, pokud vytvoříte počáteční pozici s voláním GetHeadPosition nebo Find.

Je nutné zajistit, aby hodnota POSITION představovala platnou pozici v seznamu. Pokud je neplatná, pak ladicí verze knihovny tříd Microsoft Foundation asserts.

Pokud je načtený prvek poslední v seznamu, pak je nová hodnota rPosition nastavena na HODNOTU NULL.

Příklad

// 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

Získá prvek seznamu identifikovaný rPosition, pak nastaví rPosition na POSITION hodnotu předchozí položky v seznamu.

TYPE& GetPrev(POSITION& rPosition);
const TYPE& GetPrev(POSITION& rPosition) const;

Parametry

TYPE
Parametr šablony určující typ prvků v seznamu

rPosition
Odkaz na POSITION hodnotu vrácenou předchozím GetPrev nebo jiným voláním členské funkce.

Návratová hodnota

Pokud je constseznam , GetPrev vrátí kopii prvku v záhlaví seznamu. To umožňuje, aby funkce byla použita pouze na pravé straně příkazu přiřazení a chrání seznam před úpravami.

Pokud seznam není const, GetPrev vrátí odkaz na prvek seznamu. To umožňuje, aby se funkce používala na obou stranách příkazu přiřazení, a tím umožňuje úpravu položek seznamu.

Poznámky

Můžete použít GetPrev ve smyčce zpětné iterace, pokud vytvoříte počáteční pozici s voláním GetTailPosition nebo Find.

Je nutné zajistit, aby hodnota POSITION představovala platnou pozici v seznamu. Pokud je neplatná, pak ladicí verze knihovny tříd Microsoft Foundation asserts.

Pokud je načtený prvek první v seznamu, pak je nová hodnota rPosition nastavena na NULL.

Příklad

// 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

Vrátí počet prvků seznamu.

INT_PTR GetSize() const;

Návratová hodnota

Početpoložekch

Poznámky

Voláním této metody načtěte počet prvků v seznamu. Voláním této metody se vygeneruje stejný výsledek jako metoda CList::GetCount .

Příklad

// 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 Získá ukazatel, který představuje ocasní prvek tohoto seznamu.

TYPE& GetTail();
const TYPE& GetTail() const;

Parametry

TYPE
Parametr šablony určující typ prvků v seznamu

Návratová hodnota

Podívejte se na popis návratové hodnoty pro GetHead.

Poznámky

Před voláním GetTailje nutné zajistit, aby seznam nebyl prázdný . Pokud je seznam prázdný, pak ladicí verze knihovny tříd Microsoft Foundation se uplatní. Slouží IsEmpty k ověření, zda seznam obsahuje prvky.

Příklad

// 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

Získá pozici koncového prvku tohoto seznamu; NULL pokud je seznam prázdný.

POSITION GetTailPosition() const;

Návratová hodnota

Hodnota POSITION , kterou lze použít pro iteraci nebo načtení ukazatele objektu; NULL pokud je seznam prázdný.

Příklad

// 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

Přidá prvek do tohoto seznamu za prvek na zadané pozici.

POSITION InsertAfter(POSITION position, ARG_TYPE newElement);

Parametry

position
Hodnota POSITION vrácená předchozím GetNextvoláním funkce , GetPrevnebo Find členské funkce.

ARG_TYPE
Parametr šablony určující typ prvku seznamu.

newElement
Prvek, který se má přidat do tohoto seznamu.

Návratová hodnota

Hodnota POSITION , kterou lze použít pro iteraci nebo načtení elementu seznamu.

Příklad

// 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

Přidá prvek do tohoto seznamu před prvek na zadané pozici.

POSITION InsertBefore(POSITION position, ARG_TYPE newElement);

Parametry

position
POSITION Hodnota vrácená předchozím GetNextvoláním funkce , GetPrevnebo Find členské funkce.

ARG_TYPE
Parametr šablony určující typ prvku seznamu (může být odkaz).

newElement
Prvek, který se má přidat do tohoto seznamu.

Návratová hodnota

Hodnota POSITION , kterou lze použít pro iteraci nebo načtení elementu seznamu.

Poznámky

Pokud position je NULL, prvek se vloží do hlavy seznamu.

Příklad

// 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

Určuje, zda tento seznam neobsahuje žádné prvky.

BOOL IsEmpty() const;

Návratová hodnota

Nenulové, pokud je tento seznam prázdný; jinak 0.

Příklad

// 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

Odebere všechny prvky z tohoto seznamu a uvolní přidruženou paměť.

void RemoveAll();

Poznámky

Pokud je seznam prázdný, nevygeneruje se žádná chyba.

Příklad

// 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

Odebere zadaný prvek z tohoto seznamu.

void RemoveAt(POSITION position);

Parametry

position
Pozice prvku, který má být odebrán ze seznamu.

Poznámky

Je nutné zajistit, aby hodnota POSITION představovala platnou pozici v seznamu. Pokud je neplatná, pak ladicí verze knihovny tříd Microsoft Foundation asserts.

Příklad

// 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

Odebere prvek z hlavy seznamu a vrátí ukazatel na něj.

TYPE RemoveHead();

Parametry

TYPE
Parametr šablony určující typ prvků v seznamu

Návratová hodnota

Prvek dříve v záhlaví seznamu.

Poznámky

Před voláním RemoveHeadje nutné zajistit, aby seznam nebyl prázdný . Pokud je seznam prázdný, pak ladicí verze knihovny tříd Microsoft Foundation se uplatní. Slouží IsEmpty k ověření, zda seznam obsahuje prvky.

Příklad

// 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

Odebere prvek z konce seznamu a vrátí ukazatel na něj.

TYPE RemoveTail();

Parametry

TYPE
Parametr šablony určující typ prvků v seznamu

Návratová hodnota

Prvek, který byl na konci seznamu.

Poznámky

Před voláním RemoveTailje nutné zajistit, aby seznam nebyl prázdný . Pokud je seznam prázdný, pak ladicí verze knihovny tříd Microsoft Foundation se uplatní. Slouží IsEmpty k ověření, zda seznam obsahuje prvky.

Příklad

// 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

Proměnná typu POSITION je klíčem pro seznam.

void SetAt(POSITION pos, ARG_TYPE newElement);

Parametry

pos
Prvek POSITION , který se má nastavit.

ARG_TYPE
Parametr šablony určující typ prvku seznamu (může být odkaz).

newElement
Prvek, který se má přidat do seznamu.

Poznámky

Není to stejné jako index a nemůžete pracovat s POSITION hodnotou sami. SetAt zapíše prvek na zadanou pozici v seznamu.

Je nutné zajistit, aby hodnota POSITION představovala platnou pozici v seznamu. Pokud je neplatná, pak ladicí verze knihovny tříd Microsoft Foundation asserts.

Příklad

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

Viz také

Mfc – ukázka COLLECT
CObject Třída
Graf hierarchie
CMap Třída
CArray Třída