Condividi tramite


Creare stack e raccolte di Coda

In questo articolo viene illustrato come creare altre strutture dei dati, ad esempio stack e code, dalle classi di 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, è possibile creare una raccolta di elenchi derivata che riproduce il comportamento di un ultimo-in-primo-fuori stack.Uno stack viene illustrato uno stack di cassetti in un self-service.Mentre i cassetti vengono aggiunti allo stack, vanno 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 particolare intestazione dell'elenco, pertanto, l'elemento che è stato appena aggiunto sia il primo da rimuovere.

Per creare una raccolta dello stack

  • Derivare una nuova classe di elenco da una delle classi esistenti 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 di push dello stack, sbirciata l'elemento all'inizio dello stack e visualizzare 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, è anche possibile 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 da utilizzare.Mentre più persone viene fornito, vengono inviati alla fine della riga attendere il proprio turno.Le funzioni membro AddTail e RemoveHead della raccolta di elenchi possono essere utilizzate per aggiungere e rimuovere elementi in particolare intestazione o dall'elemento tail, pertanto, l'elemento che è stato appena aggiunto sia sempre l'ultima 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 per 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