Создание коллекций стеков и очередей
В этой статье описывается, как создать другие структуры данных, например стека и очереди, из списка классов MFC. Примеры используют классы, производные от CList, но можно использовать CList напрямую, если не требуется добавить функцию.
Стека
Поскольку обычная коллекция имеет списка и головки и заканчивается, легко создать производную коллекции списков, имитирует расширение функциональности, имеющую первой — out стека. Стека, стека компонентов в столовой. Как компоненты добавляются в стеке, их переходе на вершине стека. Последний добавленный первым компонент, который необходимо удалить. Функции-члены AddHead и RemoveHead коллекции списка можно использовать для добавления и удаления элементов из списка, в частности головки таким образом, самый последний добавленный первый элемент, который необходимо удалить.
Создание коллекции стека
Создание нового производного класса списка из одного из списка существующих классов MFC и добавить дополнительные функций-членов для поддержки функции операций стека.
В следующем примере показано добавление функции-члены к элементам внедрения включен в стеке, взгляду украдкой в верхнем элементе стека и извлекает из верхний элемент стека:
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(); } };
Обратите внимание, что этот подход предоставляет базовый класс CObList. Пользователь может вызывать любой функции-члена CObList, имеет ли он для стека или нет.
Очереди
Поскольку обычная коллекция имеет списка и головки и заканчивается, также легко создать производную коллекции списков, имитирует расширение функциональности перво-в- первой — в очереди. Очередь как линия человека в столовой. Первый пользователь в первый линии, чтобы обслуживать. Как только больше людей, они сохраняются в конец линии, их принимает. Функции-члены AddTail и RemoveHead коллекции списка можно использовать для добавления и удаления элементов из специально головки или конца списка; таким образом, самый последний добавленный элемент всегда является последним, который необходимо удалить.
Создание коллекции queue
Создание нового производного класса списка из одного из предварительно определенных классов, предоставляемых списка с помощью библиотеки Microsoft Foundation Class и добавить дополнительные функций-членов для поддержки семантику операций очереди.
В следующем примере показано, как можно добавить функции-члены для добавления элемента в конец очереди и получить элемент из начала очереди.
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(); } };