私はTStackを使用して、私のプログラムで簡単なアンドゥ/リドゥ機能を実装しようとしています。この背後にある考えは、アクションが実行されると、プログラムの現在の状態が保存される、すなわちスタックにプッシュされるということである。ユーザーがアンドゥをクリックすると、プログラムの最後の状態がリロードされます。つまり、スタックからポップされます。Delphi - TStack容量混乱
この考え方の欠点は、スタックが永続的に成長することができないということです。容量値に達した後、新しいアイテムが上にプッシュされると、最も古いアイテム(スタックの一番下にあるもの)を削除する必要があります。
DelphiのTStackオブジェクトには、この「クリーンアップ」を自動的に実行すると想定されるCapacityプロパティが含まれていますが、スタックをオーバーロードすると(たとえば、capcity 10のアイテムを11アイテム押します) 。
このケースでは、TStackをより効果的に使用する方法についてアドバイスをいただけますか?私は、代替構造は配列構造を使用することを理解していますが、私はスタックを使うのが容易であることが好きです。
よろしく実際に
おそらく、キューと、キューに最後に追加されたアイテムがあるインジケータを使用する方が簡単です。そうすれば、あなたにはやり直しオプションが与えられます。 –
スタックは機能しません。それを放棄。それは間違ったデータ構造です。おそらく、デキュールを探しています。または、固定長の配列を使用して自分で作成してください。配列がいっぱいになると、循環索引を使用します。 –
申し訳ありませんが、あなたが知っているように、 'Capacity'プロパティは自動的に増加しました。彼はすべての 'TOrderedList'派生コレクションオブジェクトで同じです。成長しないように強制する設定もありません。 'OnNotify'イベントを使って自分の限界に達したかどうかを確認し、もしそうなら、必要に応じて内容を変更することができます。 –