Tworzenie kolekcji stosów i kolejek
W tym artykule wyjaśniono, jak tworzyć inne struktury danych, takie jak stosy i kolejki, z klas list MFC. W przykładach użyto klas pochodnych z CList
klasy , ale można ich używać CList
bezpośrednio, chyba że musisz dodać funkcje.
Stosy
Ponieważ kolekcja listy standardowej ma zarówno głowę, jak i ogon, łatwo jest utworzyć kolekcję listy pochodnej, która naśladuje zachowanie stosu ostatniego w pierwszym miejscu. Stos jest jak stos tac w kawiarni. Gdy zasobniki są dodawane do stosu, przechodzą na stos. Ostatni dodany zasobnik jest pierwszym do usunięcia. Funkcje AddHead
składowe kolekcji listy i RemoveHead
mogą służyć do dodawania i usuwania elementów specjalnie z nagłówka listy. W związku z tym ostatnio dodany element jest pierwszym elementem do usunięcia.
Aby utworzyć kolekcję stosów
Utwórz nową klasę listy z jednej z istniejących klas listy MFC i dodaj więcej funkcji składowych w celu obsługi funkcji operacji stosu.
W poniższym przykładzie pokazano, jak dodać funkcje składowe, aby wypchnąć elementy do stosu, zajrzeć do górnego elementu stosu i wyświetlić górny element ze stosu:
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(); } };
Należy pamiętać, że takie podejście uwidacznia podstawową CObList
klasę. Użytkownik może wywołać dowolną CObList
funkcję składową, niezależnie od tego, czy ma to sens dla stosu, czy nie.
Kolejki
Ponieważ kolekcja listy standardowej ma zarówno nagłówek, jak i ogon, można również łatwo utworzyć kolekcję listy pochodnej, która naśladuje zachowanie kolejki pierwszej w pierwszej kolejności. Kolejka jest jak linia ludzi w kawiarni. Pierwsza osoba w kolejce jest pierwszą osobą, którą należy obsłużyć. W miarę jak przychodzą więcej ludzi, idą na koniec linii, aby czekać na kolei. Funkcje AddTail
składowe kolekcji listy i RemoveHead
mogą służyć do dodawania i usuwania elementów specjalnie z nagłówka lub końca listy. W związku z tym ostatnio dodany element jest zawsze ostatnim elementem do usunięcia.
Aby utworzyć kolekcję kolejek
Utwórz nową klasę listy z jednej ze wstępnie zdefiniowanych klas list dostępnych w bibliotece klas programu Microsoft Foundation i dodaj więcej funkcji członkowskich do obsługi semantyki operacji kolejki.
W poniższym przykładzie pokazano, jak można dołączać funkcje składowe, aby dodać element na końcu kolejki i pobrać element z przodu kolejki.
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(); } };