この技術情報は別のデータ構造体を、 MFC のリスト クラスから スタック と キューなど、作成する方法について説明します。例では CListから派生したクラスを使用して機能を追加する必要がない場合 CList を直接使用できます。
スタック
標準リスト コレクションにヘッダーと tail の両方があるため、後入れ先出し (LIFO スタックの動作を模した派生リスト コレクションを作成する方が簡単です。スタックはカフェテリアのトレーのスタックのようになります。トレーがスタックに追加すると、スタックの上位を移動します。追加された最後のトレーが削除される 1 番目のです。リスト コレクションのメンバー関数 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 のメンバー関数をダイヤルできます。
キュー
標準リスト コレクションにヘッダーと tail の両方があるため、後入れ先出しキューの動作を模した派生リスト コレクションを作成するのも簡単です。キューはカフェテリアの個々の行などのようです。行の最初の個人は、実行される 1 番目のです。より多くのユーザーが到着すると同時に、回転を待機することを、行の末尾に移動します。リスト コレクションのメンバー関数 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(); } };