Freigeben über


Zugreifen auf alle Elemente einer Auflistung

Die MFC-Arrayauflistungsklassen - vorlagenbasiert - und nicht Verwendungsindizes, die auf die Elemente zuzugreifen. Die MFC-Listen- und -Zuordnungsauflistungsklassen - vorlagenbasiert und nicht - Verwenden einen Zähler des Typs POSITION, um einer bestimmten Position in der Auflistung zu beschreiben. Um eine oder mehrere Member dieser Auflistungen zuzugreifen, initialisieren Sie zuerst den Stellungsanzeiger und übergeben diese Position überprüft zur Auflistung und fordern sie mit dem folgenden Element zurückzugeben. Die Auflistung ist nicht für Wartungszustandsinformationen über den Fortschritt der Iteration zuständig. Diese Informationen werden im Stellungsanzeiger ausgeführt. Aber, eine bestimmte Position angegeben, ist die Auflistung zum Zurückgeben des folgenden Elements zuständig.

Die folgenden Prozeduren zeigen, wie über die drei wichtigsten Typen aus Auflistungen durchläuft, die mit MFC bereitgestellt werden:

  • Durchlaufen eines Arrays

  • Durchlaufen einer Liste

  • Durchlaufen einer Zuordnung

Um ein Array durchlaufen

  • Sequenzielle Indexnummern der Verwendung mit der Memberfunktion GetAt:

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

    Dieses Beispiel verwendet ein typisiertes Zeigerarray, die Zeiger auf CPerson-Objekten enthält. Das Array wird von der Klasse CObArray, der eine nicht auf Vorlagen basierenden vordefinierte Klassen abgeleitet. GetAt gibt einen Zeiger auf ein CPerson-Objekt zurück. Eine typisierte Zeigerauflistungsklassen - Arrays oder Listen - Der erste Parameter gibt die Basisklasse an; der zweite Parameter den Typ an, um zu speichern.

    Die CTypedPtrArray-Klasse überlädt auch den [ ] -Operator, um die übliche Arrayfeldindexsyntax verwenden können, um auf Elemente eines Arrays zuzugreifen. Eine Alternative zur Anweisung im Text der Schleife for oben ist

    CPerson* thePerson = myArray[i];
    

    Dieser Operator ist in const und const in Nicht- Versionen. Die const-Version, die für Arrays const aufgerufen wird, kann nur auf der rechten Seite einer Zuweisungsanweisung werden.

Um eine Liste durchlaufen

  • Verwenden Sie die Memberfunktionen GetHeadPosition und GetNext, um die Methode über die Liste zu bearbeiten:

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

    Dieses Beispiel verwendet eine typisierte Zeigerliste, um Zeiger zu CPerson-Objekten zu enthalten. Die Listendeklaration ähnelt, den für das Array in der Prozedur Um ein Array durchlaufen wird jedoch von der CObList- Klasse abgeleitet. GetNext gibt einen Zeiger auf ein CPerson-Objekt zurück.

So durchlaufen eine Zuordnung

  • Verwendung von GetStartPosition, an den Beginn der Zuordnung und des GetNextAssoc abzurufen, das dem folgenden Schlüssel und des Werts von der Zuordnung dargestellt, wie durch das folgende Beispiel ist eine Wiederholung abzurufen:

    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
    }       
    

    In diesem Beispiel wird eine einfache Zuordnungsvorlage (statt eine typisierte Zeigerauflistung) diese Verwendung, die CString verschlüsselt und speichert Zeiger zu CPerson-Objekten. Wenn Sie Zugriffsfunktionen wie GetNextAssoc verwenden, enthält die Klasse Zeiger zu CPerson-Objekten. Wenn Sie eine der nicht auf Vorlagen basierenden Zuordnungsauflistungen stattdessen verwenden, müssen Sie den zurückgegebenen CObject Zeiger auf Zeiger in CPerson umwandeln.

    Hinweis

    Nicht auf Vorlagen basierende Zuordnungen benötigt der Compiler einen Verweis auf ein CObject Zeiger im letzten Parameter in GetNextAssoc.Bei Eingabe müssen Sie die Zeiger mit diesem Typ, wie im folgenden Beispiel dargestellt umwandeln.

    Die Vorlagenprojektmappe einfacher und bieten bessere bietet Typsicherheit. Der nicht auf Vorlagen basierende Code ist schwieriger, wie hier Sie sehen können:

    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
    }
    

Weitere Informationen finden Sie unter Löschen aller Objekte in einer CObject-Auflistung.

Siehe auch

Konzepte

Auflistungen