Sdílet prostřednictvím


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

  1. 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

  1. 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();
       }
    };
    

Viz také

Kolekce