Erstellen von Stack- und Warteschlangenauflistungen
Dieser Artikel beschreibt, wie andere Datenstrukturen, wie Stapel und Warteschlangen, von den MFC-Listenklassen erstellt. Die Beispiele verwenden die Klassen, die von CList abgeleitet werden, jedoch können Sie CList direkt verwenden, es sei denn, Sie Funktionen hinzufügen müssen.
Stapel
Da die Standardlistenauflistung einen Anfang und ein Ende verfügt, ist es einfach, eine abgeleitete Listenauflistung zu erstellen, die das Verhalten eines Last-in-First-out-Stapels imitiert. Ein Stapel entspricht einem Stapel Infobereiche in einer Cafeteria. Während Infobereiche dem Stapel hinzugefügt werden, um sie auf dem Stapel. Der letzte hinzugefügte Infobereich ist der zu entfernende erste. Die Listenauflistungsmemberfunktionen AddHead und RemoveHead können verwendet werden, um Elementen vom Anfang der Liste speziell hinzuzufügen und zu entfernen; so ist das zuletzt hinzugefügte Element das erste, entfernt werden.
Um eine Stapelauflistung erstellen
Ableiten einer neuen Listenklasse einer der vorhandenen MFC-Listenklassen und fügen Sie weiteren Memberfunktionen hinzu, um die Funktionalität von Stapelvorgängen zu unterstützen.
Das folgende Beispiel zeigt, wie die Memberfunktionen Push-Elementen an dem Stapel hinzugefügt, oben Element des Stapels einsieht und das oberste Element vom Stapel aufnimmt:
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 CObList-Memberfunktion aufrufen, ob es Sinn für einen Stapel oder nicht.
Warteschlangen
Da die Standardlistenauflistung einen Anfang und ein Ende verfügt, ist sie auch einfach, eine abgeleitete Listenauflistung zu erstellen, die das Verhalten einer First-in-First-out-Warteschlange imitiert. Eine Warteschlange steht wie eine Zeile von Personen in einer Cafeteria. Die erste Person in der angeboten werden Zeile ist die erste. Sobald weitere Personen stammen, indem diese an das Ende der Zeile, die Drehung zu warten. Die Listenauflistungsmemberfunktionen AddTail und RemoveHead können verwendet werden, um Elementen vom Anfang oder am Ende der Liste speziell hinzuzufügen und zu entfernen; so ist das zuletzt hinzugefügte Element immer das zu entfernende letzte.
Um eine Warteschlangenauflistung erstellen
Ableiten einer neuen Listenklasse einer der vordefinierten Listenklassen, die mit der Microsoft Foundation Class-Bibliothek bereitgestellten und fügen Sie weiteren Memberfunktionen, die die Semantik von Warteschlangenvorgängen zu unterstützen hinzu.
Das folgende Beispiel zeigt, wie Sie Memberfunktionen anfügen können, um ein Element am Ende der Warteschlange hinzuzufügen und das Element von der Vorderseite der Warteschlange abrufen.
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(); } };