Vytváření kolekcí zásobníků a front
Tento článek vysvětluje, jak vytvořit další datové struktury, jako jsou zásobníky a fronty, ze tříd seznamů MFC. Příklady používají třídy odvozené z CList
, ale můžete použít CList
přímo, pokud nepotřebujete přidat funkce.
Zásobníky
Vzhledem k tomu, že standardní kolekce seznamů má hlavu i ocas, je snadné vytvořit odvozenou kolekci seznamů, která napodobuje chování posledního prvního zásobníku. Zásobník je jako zásobník zásobníků v kavárně. Jak jsou zásobníky přidány do zásobníku, jdou nad zásobník. Poslední přidaný zásobník je první, který se má odebrat. Členské funkce AddHead
kolekce seznamů a RemoveHead
lze je použít k přidání a odebrání prvků konkrétně z hlavy seznamu, a proto je naposledy přidaný prvek prvním, který se má odebrat.
Vytvoření kolekce zásobníku
Odvodit novou třídu seznamu z jedné z existujících tříd seznamu MFC a přidat další členské funkce pro podporu funkcí operací zásobníku.
Následující příklad ukazuje, jak přidat členské funkce pro nasdílení elementů do zásobníku, náhled na horní prvek zásobníku a zobrazení horního prvku ze zásobníku:
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(); } };
Všimněte si, že tento přístup zveřejňuje podkladovou CObList
třídu. Uživatel může volat libovolnou CObList
členovou funkci, ať už dává smysl pro zásobník, nebo ne.
Fronty
Vzhledem k tomu, že standardní kolekce seznamů má hlavu i ocas, je také snadné vytvořit odvozenou kolekci seznamů, která napodobuje chování fronty prvního v prvním kroku. Fronta je jako řada lidí v kavárně. První osoba, která je v řádku, je první, která se má obsloužovat. Když přijde víc lidí, půjdou na konec linky, aby čekali na svoji řadu. Členské funkce AddTail
kolekce seznamů a RemoveHead
lze je použít k přidání a odebrání prvků speciálně z hlavy nebo chvostu seznamu, a proto je naposledy přidaný prvek vždy poslední, který se má odebrat.
Vytvoření kolekce front
Odvodit novou třídu seznamu z jedné z předdefinovaných tříd seznamu poskytovaných knihovnou tříd Microsoft Foundation Class Library a přidat další členské funkce pro podporu sémantiky operací fronty.
Následující příklad ukazuje, jak můžete připojit členské funkce k přidání elementu na konec fronty a získat prvek z přední části fronty.
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(); } };