次の方法で共有


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

この記事では、MFC リスト クラスからスタックやキューなどの他 データ構造 を作成する方法について説明します。 この例では、 CListから派生したクラスを使用しますが、機能を追加する必要がない限り、 CList を直接使用できます。

スタック

標準リスト コレクションには頭と末尾の両方があるため、最後の最初のスタックの動作を模倣する派生リスト コレクションを簡単に作成できます。 積み重ねはカフェテリアのトレイの積み重ねのようなものです。 トレイはスタックに追加されると、スタックの上に移動します。 最後に追加されたトレイは、取り外す最初のトレイです。 リスト コレクションメンバー関数 AddHead および RemoveHead を使用して、リストの先頭から特に要素を追加および削除できます。したがって、最後に追加された要素が最初に削除されます。

スタック コレクションを作成するには

  1. 既存の 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 を使用して、リストの先頭または末尾から要素を追加および削除できます。したがって、最後に追加された要素は常に最後に削除されます。

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

  1. Microsoft Foundation クラス ライブラリで提供されている定義済みのリスト クラスの 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();
       }
    };
    

こちらも参照ください

コレクション