创建堆栈和队列集合

本文说明如何创建其他数据结构,例如 堆栈 ,并 队列,从 MFC 列表类。 示例使用从 CList派生的类,但是,您可以直接使用 CList ,除非您需要添加功能。

堆栈

由于该条件列出集合具有前面,并且尾,创建派生的列表模式一个后进先出 (lifo) 堆栈的行为的集合非常容易。 堆栈是象堆盘子在自助式餐厅。 在磁盘上添加到堆栈,它们超出了它上面堆栈。 添加了最后一个磁盘是要移除的第一个。 列出用于收集成员函数 AddHeadRemoveHead 可用于从列表的开头特别添加和移除元素;因此,与第一个要移除的最新添加的元素。

创建堆栈集合

  • 派生新列表从一个类的现有 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 成员函数,它是否有堆栈的意义。

队列

由于该条件列出集合具有前面,并且尾,创建派生的列表模式一个先入先分析队列的行为的集合也非常容易。 队列与方行在自助式餐厅。 是第一个将服务的行的第一个人员。 当更多人同时,它们转到行尾正在等待其关闭。 列出用于收集成员函数 AddTailRemoveHead 可用于从列表的开头或尾特别添加和移除元素;因此,该最近添加的元素始终是要移除的最后。

创建队列集合

  • 派生新列表从一个的类预定义的列表类随 Microsoft 基础类库并将多个成员函数支持队列操作语义。

    下面的示例演示如何追加成员函数将元素添加到队列并获取结束元素从队列前面的。

    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(); }
    }; 
    

请参见

概念

集合