次の方法で共有


スタック コレクションとキュー コレクションの作成

更新 : 2007 年 11 月

ここでは、スタックやキューなどのデータ構造を 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 メンバ関数を呼び出すことができます。

キュー

標準のリスト コレクションには先頭と末尾があるので、先入れ先出し (FIFO) キューと同じように動作するリスト コレクションを簡単に派生できます。キューは、カフェテリアで順番を待っている人の行列に似ています。列の先頭の人が、最初にサービスを受けます。新しく到着した人は、列の最後に付いてサービスを待ちます。リスト コレクションのメンバ関数 AddTailRemoveHead は、リストの末尾に要素を追加し、リストの先頭から要素を取り出します。つまり、最後に追加した要素は最後に取り出されます。

キュー コレクションを作成するには

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

参照

概念

コレクション クラス