创建堆栈和队列集合
本文说明如何创建MFC 类列表中其他数据结构,例如 堆栈 和 队列。 示例使用从 CList派生的类,但是,可以直接使用 CList,除非您需要添加功能。
Stacks
由于标准列表集合具有列表头和尾,创建模仿一个后进先出 (LIFO) 堆栈的行为的派生列表集合很容易。 堆栈是像在堆盘子自助餐厅。 当任务添加到堆栈,它们在它转到上面堆栈。 最后栏添加第一个中移除。 列表集合成员函数 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 成员函数,使其堆栈中有意义。
队列
由于标准列表集合具有列表头和尾,创建模仿一个先进先出 (FIFO) 队列的行为的派生列表集合很容易。 队列与配置自助餐厅行中。 行的第人是第个服务。 随着更多的人是,则转到行结束等待其关闭。 列表集合成员函数 AddTail 和 RemoveHead 可用于从列表的报头或尾特别添加和移除元素;因此,新添加的元素为最后移除。
创建队列集合:
从某个预定义的列表类派生新的列表类随 Microsoft 基础类 (MFC) 库并添加更多支持成员函数语义排队操作。
下面的示例显示可如何追加成员函数将元素添加到队列的结尾和从队列前面的获取元素。
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(); } };