Zugreifen auf alle Member einer Auflistung

Die MFC-Array — auflistungsklassen nicht auf Vorlagen basierenden und ihre Indizes verwenden — Elemente zuzugreifen.Die MFC-Listen- und der auf Vorlagen basierenden — auflistungsklassen Zuordnungen und nicht der verwenden einen Indikator vom Typ POSITION, um von einer angegebenen Position innerhalb der Auflistung zu beschreiben.Um eine oder mehrere Member dieser Auflistungen zu beheben, initialisieren Sie zuerst den Stellungsanzeiger und führen dann wiederholt diese Position der Auflistung und fordern um sie um das nächste Element zurückzugeben.Die Auflistung ist nicht zum Verwalten zustandsinformationen über den Status der Iteration verantwortlich.Diese Informationen werden im Stellungsanzeiger geführt.Wenn eine bestimmte Position angegeben ist, die Auflistung für die Rückgabe des nächsten Elements verantwortlich.

In den folgenden Verfahren wird gezeigt, wie eine Schleife über den drei wichtigsten Arten von Auflistungen durchläuft, die mit MFC bereitgestellt werden:

  • Ein Array durchlaufen

  • Eine Liste durchlaufen

  • Eine Zuordnung durchlaufen

So fügen Sie ein Array durchlaufen

  • Sequenzielle Indexnummern der Verwendung mit der GetAt-Memberfunktion:

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

    In diesem Beispiel wird ein typisiertes Zeigerarray, die Zeiger auf CPerson-Objekten enthält.Das Array wird von der Klasse CObArray, eine der nicht auf Vorlagen basierende vordefinierten Klassen abgeleitet.GetAt gibt einen Zeiger auf einen CPerson-Objekt zurück.Für typisierte Zeiger auflistungsklassen — Arrays oder Listen — Der erste Parameter gibt die Basisklasse auf. der zweite Parameter gibt den Typ an, um zu speichern.

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

    CPerson* thePerson = myArray[i];
    

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

So zeigen Sie eine Liste durchlaufen

  • Verwenden Sie die Memberfunktionen GetHeadPosition und GetNext, um die Methode durch die Liste zu umgehen:

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

    In diesem Beispiel wird eine typisierte Liste Zeiger, um Zeiger auf CPerson-Objekten enthält.Die Auflistung ähnelt der Deklaration für das Array in der Prozedur So fügen Sie ein Array durchlaufen ist jedoch von der Klasse abgeleitet CObList.GetNext gibt einen Zeiger auf einen CPerson-Objekt zurück.

So erstellen Sie eine Zuordnung durchlaufen

  • Verwendung GetStartPosition, an den Anfang der Zuordnung und des GetNextAssoc zu gelangen, um die folgenden Schlüssels und des Werts in der Zuordnung, wie im folgenden Beispiel gezeigt wird:

    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 Vorlage Zuordnungen (anstatt eine typisierte Auflistung von Zeigern) verwendet CString Schlüssel und speichert Zeiger auf CPerson-Objekten.Wenn Sie Zugriff auf Funktionen wie GetNextAssoc verwenden, stellt die Klasse Zeiger auf CPerson-Objekten bereit.Wenn Sie eine der Auflistungen von Zuordnungen nicht auf Vorlagen basierende Version verwenden, müssen Sie den zurückgegebenen CObject Zeiger auf einen Zeiger auf CPerson umwandeln.

    HinweisHinweis

    Für nicht auf Vorlagen basierende Zuordnungen benötigt der Compiler einen Verweis auf ein CObject Zeiger im letzten Parameter für GetNextAssoc.Bei Eingabe müssen Sie die Zeiger auf diesen Typ, wie im folgenden Beispiel gezeigt umwandeln.

    Die Projektmappe beiträgt ist einfacher und Vorlagen bieten eine bessere Typsicherheit.Der nicht auf Vorlagen basierenden Code ist schwieriger, wie Sie hier aufgeführt werden:

    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 Alle Objekte in einer CObject-Auflistung löschen.

Siehe auch

Konzepte

Auflistungen