Sdílet prostřednictvím


Přístup ke všem členům kolekce

Kolekce třídy array MFC – obě založený na šabloně a není – indexy lze použít pro přístup k jejich prvků.Třídy MFC seznam a mapa kolekce – oba založený na šabloně a není – použít indikátor typu pozice popisující dané pozici v rámci kolekce.Přístup z těchto kolekcí jednoho nebo více členů můžete nejprve inicializovat ukazatel polohy opakovaně předat kolekce poloze a požádá ji, vraťte se na další prvek.Není odpovědný za udržování informací o stavu o Průběh iterace v kolekci.Že informace jsou uchovávány v poloze ukazatele.Ale uvedeny konkrétní pozice kolekce je za vrácení další prvek.

Následující postupy popisují, jak iterovat přes tři hlavní typy kolekcí s MFC:

  • Iterace matice

  • Iterace seznamu

  • Iterace mapy

Iterace matice

  • Pořadová čísla indexu se používají GetAt členské funkce:

    CTypedPtrArray<CObArray, CPerson*> myArray;
    
    myArray.Add(new CPerson());
    for (int i = 0; i < myArray.GetSize();i++)
    {
       CPerson* thePerson = myArray.GetAt(i);
       thePerson->AssertValid();
    }       
    

    Tento příklad používá ukazatel zadaného pole, které obsahuje odkazy na CPerson objektů.Pole je odvozena od třídy CObArray, jeden z nontemplate předdefinovaných tříd.GetAtVrací ukazatel CPerson objektu.Pro zadaný ukazatel kolekce třídy – matice či seznamy – první parametr určuje základní třídy; druhý parametr určuje typ pro ukládání.

    CTypedPtrArray Třídy také přetížení [] operátor, takže můžete použít obvyklé syntaxe pole index přístup k prvkům matice.Alternativou k prohlášení v textu for je smyčka nad

    CPerson* thePerson = myArray[i];
    

    Tento operátor existuje v obou const a -b verze.Const verzi, která je vyvolána pro const matice, se mohou objevit pouze na pravé straně příkazu přiřazení.

Iterace seznamu

  • Pomocí funkce členů GetHeadPosition a GetNext prostřednictvím seznamu váš způsob práce:

    CTypedPtrList<CObList, CPerson*> myList;
    
    myList.AddHead(new CPerson());
    POSITION pos = myList.GetHeadPosition();
    while(pos != NULL)
    {
       CPerson* thePerson = myList.GetNext(pos);
       thePerson->AssertValid();
    }
    

    V tomto příkladu je ukazatel zadaný seznam obsahuje odkazy na CPerson objektů.Seznam prohlášení podobá pro pole v postupu k matici , ale je odvozena od třídy CObList.GetNextVrací ukazatel CPerson objektu.

Iterace mapy

  • Použití GetStartPosition do začátku mapy a GetNextAssoc opakovaně získat další klíče a hodnoty z mapy, jak ukazuje následující příklad:

    CMap<CString, LPCTSTR, CPerson*, CPerson*> myMap;
    CPerson myPerson;
    
    myMap.SetAt(_T("Bill"), &myPerson);
    POSITION pos = myMap.GetStartPosition();
    while(pos != NULL)
    {
       CPerson* pPerson;
       CString string;
       // Get key (string) and value (pPerson)
       myMap.GetNextAssoc(pos, string, pPerson);
       // Use string and pPerson
    }       
    

    Tento příklad používá jednoduché mapy šablony (spíše než zadaný ukazatel kolekce), který používá CString klíčů a ukládá odkazy na CPerson objektů.Při použití funkce přístup jako GetNextAssoc, třída poskytuje odkazy na CPerson objektů.Používáte-li jednu mapu kolekce nontemplate místo, musí odevzdaných vrácené CObject ukazatele ukazatel na CPerson.

    [!POZNÁMKA]

    Kompilátor mapy nontemplate vyžaduje odkaz na CObject ukazatele v poslední parametr GetNextAssoc.Na vstupu musí odevzdaných ukazatele typu, jak je znázorněno v následujícím příkladu.

    Šablona řešení je jednodušší a pomáhá zajistit vyšší bezpečnost typů.Kód nontemplate je složitější, jak můžete vidět zde:

    CMapStringToOb myMap;    // A nontemplate collection class
    CPerson myPerson;
    myMap.SetAt(_T("Bill"), &myPerson);
    
    POSITION pos = myMap.GetStartPosition();
    while(pos != NULL)
    {
       CPerson* pPerson;
       CString string;
       // Gets key (string) and value (pPerson)
       myMap.GetNextAssoc(pos, string, 
                         (CObject*&)pPerson);
       ASSERT(pPerson->IsKindOf(
                 RUNTIME_CLASS(CPerson)));
       // Use string and pPerson
    }
    

Další informace naleznete v Odstranění všech objektů v kolekci CObject.

Viz také

Koncepty

Kolekce