Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cet article explique comment créer d’autres structures de données, telles que des piles et des files d’attente, à partir de classes de liste MFC. Les exemples utilisent des classes dérivées de CList, mais vous pouvez utiliser CList directement, sauf si vous devez ajouter des fonctionnalités.
Piles
Étant donné que la collection de listes standard a un début et une fin, il est facile de créer une collection de listes dérivée qui reproduit le comportement d’une pile de type "dernière entrée - première sortie". Une pile est similaire à un empilement de plateaux dans une cafétéria. Lorsque les plateaux sont ajoutés à la pile, ils sont sur le dessus de la pile. Le dernier plateau ajouté est le premier à être retiré. Les fonctions membres AddHead et RemoveHead de la collection de listes peuvent être utilisées pour ajouter et supprimer des éléments spécifiquement depuis le début de la liste ; par conséquent, l’élément le plus récemment ajouté est le premier à être supprimé.
Pour créer une collection de piles
Dérivez une nouvelle classe de liste de l'une des classes de liste MFC existantes et ajoutez des fonctions membres pour prendre en charge les fonctionnalités des opérations de pile.
L'exemple suivant montre comment ajouter des fonctions membres pour empiler des éléments, jetez un coup d'œil à l'élément supérieur de la pile et désempilez-le :
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 CObList . L’utilisateur peut appeler n’importe quelle CObList fonction membre, qu’elle soit logique ou non pour une pile.
Files d’attente
Étant donné que la collection de listes standard a à la fois une tête et une queue, il est également facile de créer une collection de listes dérivée qui imite le comportement d’une file d’attente de première entrée en premier sorti. Une file d’attente est comme une ligne de personnes dans une cafétéria. La première personne en ligne est la première à être servie. Plus de gens viennent, ils vont à la fin de la ligne pour attendre leur tour. Les fonctions membres de la collection de listes AddTail et RemoveHead peuvent être utilisées pour ajouter et retirer des éléments spécifiquement à la tête ou à la fin de la liste. Ainsi, l’élément ajouté le plus récemment est toujours le dernier à être retiré.
Pour créer une collection de files d’attente
Dérivez une nouvelle classe de liste de l’une des classes de liste prédéfinies fournies avec la bibliothèque de classes Microsoft Foundation et ajoutez d’autres 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 obtenir l’élément à partir de 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(); } };