Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel wird erläutert, wie Sie andere Datenstrukturen wie Stapel und Warteschlangen aus MFC-Listenklassen erstellen. In den Beispielen werden Klassen verwendet, die von CList
abgeleitet sind; jedoch können Sie CList
direkt verwenden, es sei denn, Sie müssen Funktionalität hinzufügen.
Stacks
Da die Standardlistenauflistung sowohl einen Kopf als auch einen Tail hat, ist es einfach, eine abgeleitete Listensammlung zu erstellen, die das Verhalten eines Last-in-first-out-Stapels nachahmt. Ein Stapel ist wie ein Stapel von Schalen in einer Kantine. Wenn Ablagen zum Stack hinzugefügt werden, kommen sie oben auf den Stack. Das zuletzt hinzugefügte Fach wird als erstes wieder entfernt. Die Elementfunktionen AddHead
der Listensammlung und RemoveHead
können verwendet werden, um Elemente speziell aus dem Kopf der Liste hinzuzufügen und zu entfernen. Daher ist das zuletzt hinzugefügte Element das erste, das entfernt werden soll.
So erstellen Sie eine Stack Collection
Leiten Sie eine neue Listenklasse von einer der vorhandenen MFC-Listenklassen ab und fügen Sie weitere Memberfunktionen hinzu, um die Funktionalität von Stapelvorgängen zu unterstützen.
Das folgende Beispiel zeigt, wie Sie Memberfunktionen hinzufügen, um Elemente auf den Stapel zu legen, das oberste Element des Stapels zu betrachten und das oberste Element vom Stapel zu entfernen:
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 verfügbar macht. Der Benutzer kann jede beliebige CObList
-Mitgliedsfunktion aufrufen, unabhängig davon, ob sie für einen Stack sinnvoll ist oder nicht.
Warteschlangen
Da die Standardlistenauflistung sowohl einen Kopf als auch einen Tail hat, ist es auch einfach, eine abgeleitete Listensammlung zu erstellen, die das Verhalten einer First-in-First-Out-Warteschlange nachahmt. Eine Warteschlange ist wie eine Reihe von Personen in einer Kantine. Die erste Person in Zeile ist die erste, die bedient werden soll. Wenn mehr Menschen kommen, gehen sie ans Ende der Schlange, um zu warten, bis sie an der Reihe sind. Die Memberfunktionen AddTail
und RemoveHead
der Listensammlung können verwendet werden, um Elemente gezielt am Anfang oder Ende der Liste hinzuzufügen und zu entfernen; somit wird das zuletzt hinzugefügte Element immer als letztes entfernt.
So erstellen Sie eine Warteschlange Collection
Leiten Sie eine neue Listenklasse von einer der vordefinierten Listenklassen ab, die mit der Microsoft Foundation Class Library bereitgestellt werden, und fügen Sie weitere Memberfunktionen hinzu, um die Semantik von Warteschlangenvorgängen zu unterstützen.
Das folgende Beispiel zeigt, wie Sie Memberfunktionen anfügen können, um am Ende der Warteschlange ein Element hinzuzufügen und das Element von der Vorderseite der Warteschlange abzurufen.
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(); } };