Poznámka
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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í seznamová kolekce má hlavu i ocas, je snadné vytvořit odvozenou kolekci, která se chová jako zásobník typu last-in-first-out. Zásobník je jako hromada táců v jídelně. Jak jsou tácy přidávány do hromady, umisťují se na vrch. Poslední přidaný zásobník je první, který bude odebrán. Členské funkce AddHead
kolekce seznamů a RemoveHead
lze použít konkrétně k přidání a odebrání prvků z hlavy seznamu, takže naposledy přidaný prvek je první, který se odstraní.
Chcete-li vytvořit kolekci zásobníku
Odvoďte novou třídu seznamu z jedné z existujících tříd seznamů MFC a přidejte další členské funkce pro podporu zásobníkových operací.
Následující příklad ukazuje, jak přidat členské funkce pro vložení prvků do zásobníku, podívat se na horní prvek zásobníku a odebrat horní prvek 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 spustit libovolnou CObList
členovou funkci, ať už dává smysl pro zásobník, nebo ne.
Fronty/Řady
Vzhledem k tomu, že standardní kolekce seznamů má hlavu i ocas, je snadné vytvořit odvozenou kolekci seznamů, která napodobuje chování fronty typu FIFO (First-In-First-Out). Fronta je jako řada lidí v kavárně. První osoba v řadě je první, která je obsloužena. Když přijde víc lidí, půjdou na konec linky, aby čekali na svoji řadu. Členské funkce AddTail
a RemoveHead
kolekce seznamů lze použít k přidání a odebrání prvků konkrétně ze začátku nebo konce seznamu; tím pádem je naposledy přidaný prvek vždy ten poslední, který se odebere.
Chcete-li vytvořit kolekci front
Odvoďte novou seznamovou třídu z jedné z předdefinovaných tříd poskytovaných knihovnou Microsoft Foundation Class Library a přidejte další metody 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(); } };