Erstellen von Stapel- und Warteschlangen-Auflistungen
In diesem Artikel wird beschrieben, wie andere Datenstrukturen wie Stapel und Warteschlangen, der MFC-Listen Klassen erstellt.Die Beispiele verwenden die Klassen, die von CList abgeleitet sind, aber Sie können CList direkt verwenden, es sei denn, Sie Funktionen hinzufügen müssen.
Stapel
Da die standardmäßige listenauflistung einen Anfang und das Ende aufweist, ist es einfach, eine abgeleitete Listenauflistung zu erstellen, die das Verhalten eines Last-in-First-out-Stapels nachahmt.Ein Stapel ist z. B. ein Stapel Infobereiche in einer Cafeteria.Während Infobereiche dem Stapel hinzugefügt werden, stellen sie auf den Stapel.Der letzte hinzugefügte Infobereich ist der erste entfernt werden soll.Die Listenauflistungs Memberfunktionen und AddHeadRemoveHead können verwendet werden, um Elemente vom Anfang der Liste explizit hinzuzufügen und zu entfernen. Daher ist das zuletzt hinzugefügte Element das erste entfernt werden soll.
So erstellen Sie eine Auflistung der Stapel
Leiten Sie eine neue Liste MFC-Listen Klasse von einer der vorhandenen Klassen und fügen Sie mehr Memberfunktionen hinzu, um die Funktionalität von Stapel - Vorgänge zu unterstützen.
Das folgende Beispiel zeigt, wie die Memberfunktionen Push-Elementen auf dem Stapel Element des Stapels nach oben erweitert und einsieht das oberste Element vom Stapel auf:
class CTray : public CObject { }; class CStack : public CTypedPtrList< CObList, CTray* > { public: // Add element to top of stack void Push( CTray* newTray ) { AddHead( newTray ); } // Peek at top element of stack CTray* Peek() { return IsEmpty() ? NULL : GetHead(); } // Pop top element off stack CTray* Pop() { return RemoveHead(); } };
Beachten Sie, dass dieser Ansatz die zugrunde liegende CObList-Klasse macht.Der Benutzer kann jede CObList-Memberfunktion aufrufen, ob es sinnvoll für einen Stapel ist oder nicht.
Warteschlangen
Da die standardmäßige listenauflistung einen Anfang und das Ende verfügt, ist es einfach, eine abgeleitete Listenauflistung zu erstellen, die das Verhalten einer First-in-First-out-Warteschlange nachahmt.Eine Warteschlange ist z. B. eine Linie von Personen in einer Cafeteria.Die erste Person in der ausgeliefert wird die erste Zeile befindet.Sobald weitere Personen stammen, stellen sie am Ende der Zeile, deren gedreht werden soll.Die Listenauflistungs Memberfunktionen und AddTailRemoveHead können verwendet werden, um Elemente vom Anfang oder das Ende der Liste explizit hinzuzufügen und zu entfernen. Daher ist das zuletzt hinzugefügte Element immer das zu entfernende Letzte.
So erstellen Sie eine Auflistung von Warteschlangen
Leiten Sie eine neue Listen Klasse von einer der vordefinierten Liste Klassen, die mit Microsoft Foundation Class Library bereitgestellt werden und fügen Sie mehr Memberfunktionen, um die Semantik von Warteschlangen unterstützt Vorgänge hinzu.
Im folgenden Beispiel wird gezeigt, wie Sie Memberfunktionen anfügen können, um ein Element am Ende der Warteschlange hinzuzufügen und das Element aus der Vorderseite der Warteschlange abgerufen.
class CQueue : public CTypedPtrList< CObList, CPerson* > { public: // Go to the end of the line void AddToEnd( CPerson* newPerson ) { AddTail( newPerson ); } // End of the queue // Get first element in line CPerson* GetFromFront() { return IsEmpty() ? NULL : RemoveHead(); } };