スタック コレクションとキュー コレクションの作成
この記事では、MFC リスト クラスからスタックやキューなどの他のデータ構造を作成する方法について説明します。 この例では、CList
から派生したクラスを使用しますが、機能を追加する必要がない限り、CList
を直接使用できます。
スタック
標準リスト コレクションには頭と末尾の両方が含まれるため、後入れ先出しスタックの動作を模倣する派生リスト コレクションを簡単に作成できます。 スタックは、カフェテリアのトレイのスタックに似ています。 トレイがスタックに追加されるときには、スタックの一番上に置かれます。 最後に追加されたトレイが最初に利用されます。 リスト コレクション メンバー関数 AddHead
と RemoveHead
を使用すると、リストの先頭部で特に要素を追加したり削除したりできます。この場合は、最も新しく追加された要素が最初に削除されます。
スタック コレクションを作成するには
既存の MFC リスト クラスの 1 つから新しいリスト クラスを派生させ、スタック操作の機能をサポートするメンバー関数をさらに追加します。
次の例は、スタックに要素をプッシュするメンバー関数を追加し、スタックの最上部の要素をクイック表示し、スタックから最上部の要素をポップする方法を示しています。
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
を使用すると、リストの先頭部または末尾で特に要素を追加したり削除したりできます。この場合は、最も新しく追加された要素が必ず最後に削除されます。
キュー コレクションを作成するには
Microsoft Foundation Class ライブラリに用意されている定義済みのリスト クラスの 1 つから新しいリスト クラスを派生させ、キュー操作のセマンティクスをサポートするメンバー関数をさらに追加します。
次の例は、メンバー関数を追加してキューの末尾に要素を追加し、キューの前から 要素を取得する方法を示しています。
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(); } };