Condividi tramite


Creazione di raccolte di stack e code

In questo articolo viene illustrato come creare altre strutture di dati, come stack e code, dalle classi dell'elenco MFC. Gli esempi utilizzano le classi derivate da CList, ma è possibile utilizzare direttamente CList a meno che non sia necessario aggiungere la funzionalità.

Stack

Poiché la raccolta di elenchi standard ha un'intestazione che un elemento tail, è facile creare una raccolta di elenchi derivata che riproduce il comportamento di un ultimo-in- first out stack. Uno stack viene illustrato uno stack di cassetti in un self-service. Mentre i cassetti vengono aggiunti allo stack, vai sullo stack. L'ultimo contenitore aggiunto è il primo da rimuovere. Le funzioni membro AddHead e RemoveHead della raccolta di elenchi possono essere utilizzate per aggiungere e rimuovere elementi in modo specifico dall'intestazione dell'elenco; pertanto, l'elemento che è stato appena aggiunto è il primo da rimuovere.

Per creare una raccolta dello stack

  • Derivare una nuova classe di elenco da una delle classi esistenti dell'elenco di MFC e aggiungere più funzioni membro per supportare la funzionalità delle operazioni dello stack.

    Nell'esempio seguente viene illustrato come aggiungere funzioni membro agli elementi push dello stack, danno una riportato all'elemento all'inizio dello stack e schioccano l'elemento superiore dello stack:

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

Si noti che questo approccio espone la classe sottostante di CObList. L'utente può chiamare qualsiasi funzione membro di CObList, se è utile per uno stack o meno.

Code

Poiché la raccolta di elenchi standard ha un'intestazione che un elemento tail, ma è altrettanto facile creare una raccolta di elenchi derivata che riproduce il comportamento di una first in first out coda. Una coda è simile a una riga di persone in un self-service. La prima persona nella riga è la prima intensivo. Mentre non più persone, vai alla fine della riga nel proprio turno. Le funzioni membro AddTail e RemoveHead della raccolta di elenchi possono essere utilizzate per aggiungere e rimuovere elementi in modo specifico dall'intestazione o viceversa elenco; pertanto, l'elemento che è stato appena aggiunto sia sempre l'ultimo da rimuovere.

Per creare una raccolta della coda

  • Derivare una nuova classe di elenco da una delle classi predefinite dell'elenco fornito della libreria MFC e aggiungere più funzioni membro per supportare la semantica delle operazioni della coda.

    Nell'esempio seguente viene illustrato come è possibile aggiungere le funzioni membro per aggiungere un elemento alla fine della coda e ottenere l'elemento dall'inizio della coda.

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

Vedere anche

Concetti

Raccolte