Créer des collections de pile et de file d'attente
Cet article explique comment créer d'autres structures de données, telles que piles et files d'attente, des classes ACL MFC.Les exemples utilisent des classes dérivées d' CList, mais vous pouvez utiliser CList directement à moins que vous ne deviez ajouter des fonctionnalités.
Piles
Étant donné que la collection de listes standard possède une tête et une file d'attente, il est facile de créer une collection de listes dérivée qui reproduit le comportement d'une pile de type dernier entré premier sorti.Une pile est similaire à une pile de barres d'état dans un cafétéria.Lorsque des barres d'état sont ajoutées à la pile, elles font au-dessus de la pile.La dernière barre d'état ajoutée est la première à supprimer.Les fonctions membres AddHead et RemoveHead de collection de listes peuvent être utilisées pour ajouter et supprimer des éléments spécifiquement partir de le début de la liste ; ainsi, l'élément récemment ajouté est le premier à supprimer.
Pour créer une collection de pile
Dérivez une nouvelle classe de liste de l'une des classes existantes de liste MFC et ajoutez plus de fonctions membres pour prendre en charge les fonctionnalités des opérations de pile.
L'exemple suivant indique comment ajouter des fonctions membres aux éléments de modèle push sur la pile, jeter un coup d'œil sur le premier élément de la pile, et un pop le premier élément de la pile :
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(); } };
Notez que cette approche expose la classe sous-jacente d' CObList .L'utilisateur peut appeler toute fonction membre d' CObList , qu'elle est appropriée pour une pile ou pas.
Files d'attente
Étant donné que la collection de listes standard possède une tête et une file d'attente, il peut s'avérer utile de créer une collection de listes dérivée qui reproduit le comportement d'une file d'attente de type premier entré, premier sorti.Une file d'attente est comme une ligne de personnes dans un cafétéria.La première personne dans la ligne est la première à utiliser.À mesure que d'autres personnes proviennent, ils entrent à la fin de la ligne pour attendre que leur tour.Les fonctions membres AddTail et RemoveHead de collection de listes peuvent être utilisées pour ajouter et supprimer des éléments spécifiquement partir de le début ou la fin de la liste ; ainsi, l'élément récemment ajouté est toujours la dernière à supprimer.
Pour créer une collection de file d'attente
Dérivez une nouvelle classe de liste de l'une des classes ACL prédéfinies fournies avec bibliothèque MFC et ajoutez plus de fonctions membres pour prendre en charge la sémantique des opérations de file d'attente.
L'exemple suivant montre comment ajouter des fonctions membres pour ajouter un élément à la fin de la file d'attente et l'élément présents à l'avant de la file d'attente.
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(); } };