建立堆疊和佇列集合
這篇文章說明如何建立其他的資料結構,例如牌堆 和 佇列,從 MFC 列出類別。 這些範例使用衍生自CList,但是您可以使用CList直接除非必要,以增加其功能性。
牌堆
因為標準的串列集合有前端和尾端,很輕易地建立一個模仿堆疊後進先出的行為的衍生的串列集合。 堆疊好比是一疊自助餐廳中的盤子堆。 當紙匣新增至堆疊,一邊在堆疊頂端。 最後一個上去的盤子是最先被取走。 清單集合的成員函式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可用來加入和移除項目特別是頭或尾端的清單。 因此,大部分最近新增項目一定是要移除的最後一個。
若要建立佇列集合
從其中一個 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(); } };