Creazione di raccolta Stack e Code
Questo articolo illustra come creare altre strutture di dati, ad esempio stack e code, da classi di elenco MFC. Gli esempi usano classi derivate da CList
, ma è possibile usare CList
direttamente, a meno che non sia necessario aggiungere funzionalità.
Stack
Poiché la raccolta di elenchi standard ha sia una testa che una coda, è facile creare una raccolta di elenchi derivata che simula il comportamento di uno stack last-in-first-out. Una pila è come una pila di vassoi in una caffetteria. Man mano che i vassoi vengono aggiunti allo stack, passano sopra lo stack. L'ultimo vassoio aggiunto è il primo da rimuovere. Le funzioni AddHead
membro della raccolta di elenchi e RemoveHead
possono essere utilizzate per aggiungere e rimuovere elementi in modo specifico dall'inizio dell'elenco, pertanto l'elemento aggiunto più di recente è il primo da rimuovere.
Per creare una raccolta di stack
Derivare una nuova classe elenco da una delle classi di elenco MFC esistenti e aggiungere altre funzioni membro per supportare la funzionalità delle operazioni stack.
Nell'esempio seguente viene illustrato come aggiungere funzioni membro per eseguire il push degli elementi nello stack, visualizzare l'elemento superiore dello stack e visualizzare l'elemento superiore dallo 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 CObList
. L'utente può chiamare qualsiasi CObList
funzione membro, indipendentemente dal fatto che abbia senso per uno stack o meno.
Code
Poiché la raccolta di elenchi standard ha sia una testa che una coda, è anche facile creare una raccolta di elenchi derivata che simula il comportamento di una coda first-in-first-out. Una coda è come una linea di persone in una caffetteria. La prima persona in linea è la prima a essere servita. Man mano che arrivano più persone, vanno alla fine della linea per aspettare il loro turno. Le funzioni AddTail
membro della raccolta di elenchi e RemoveHead
possono essere usate per aggiungere e rimuovere elementi in modo specifico dalla testa o dalla parte finale dell'elenco. L'ultimo elemento aggiunto è quindi sempre l'ultimo elemento da rimuovere.
Per creare una raccolta di code
Derivare una nuova classe di elenco da una delle classi di elenco predefinite fornite con la libreria di classi di Microsoft Foundation e aggiungere altre funzioni membro per supportare la semantica delle operazioni di accodamento.
Nell'esempio seguente viene illustrato come aggiungere funzioni membro per aggiungere un elemento alla fine della coda e ottenere l'elemento dalla parte anteriore 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(); } };