Criando coleções de pilhas e filas
Este artigo explica como criar outras estruturas de dados, como pilhas e filas, das classes de MFC lista. Os exemplos usam as classes derivadas de CList, mas você pode usar CList diretamente a menos que você precise adicionar funcionalidade.
Pilhas
Porque a coleção padrão da lista tem um início e uma parte final, é fácil criar uma coleção derivado da lista que imite o comportamento de uma último-em- primeira em expansão pilha. Uma pilha é como uma pilha de bandejas em um pub. Como as bandejas são adicionadas à pilha, não na pilha. A superfície da última adicionada é a primeira a ser removida. As funções de membro AddHead e RemoveHead da coleção da lista podem ser usadas para adicionar e remover especificamente os elementos do início da lista; assim, o elemento é adicionado recentemente o primeiro a ser removido.
Para criar uma coleção de pilha
Derivar uma nova classe da lista de uma das classes existentes na lista de MFC e adicionar mais funções de membro para dar suporte à funcionalidade de operações de pilha.
O exemplo a seguir mostra como adicionar sobre funções de membro para elementos de envio para a pilha, espreitá-las no elemento superior da pilha, e exibida o elemento superior da pilha:
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(); } };
Observe que esta abordagem expõe a classe subjacente de CObList . O usuário pode chamar qualquer função de membro de CObList , se faz sentido para uma pilha ou não.
Filas
Porque a coleção padrão da lista tem um início e uma parte final, também é fácil criar uma coleção derivado da lista que imite o comportamento de uma uma primeira em expansão fila. Uma fila é como uma linha de pessoas em um pub. A pessoa na primeira linha é a primeira a ser atendida. à medida que mais pessoas vêm, vá até o final da linha aguarda a sua volta. As funções de membro AddTail e RemoveHead da coleção da lista podem ser usadas para adicionar e remover especificamente os elementos de início ou do final da lista; assim, o elemento é adicionado recentemente sempre o último a ser removido.
Para criar uma coleção de fila
Derivar uma nova classe da lista de uma das classes predefinidas da lista fornecidas com a biblioteca de classes do Microsoft e adicionar mais funções de membro para dar suporte a semântica de operações de fila.
O exemplo a seguir mostra como você pode acrescentar funções de membro para adicionar um elemento ao final da fila e para obter o elemento da frente da fila.
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(); } };