固定サイズの既存のデータ構造があり、新しい要素が挿入された場合、最も古い/最後の要素を押し出しますか?


20

新しい要素が挿入された場合に最も古い/最後の要素をプッシュするデータ構造を探しています。たとえばD、構造を表します。Dタイプの3つの要素が含まNumber Dのデフォルト値に初期化される1, 2とし3

D=[123]

場合にNumber値が含まれていることが5中に挿入されD3押し出さされ、一方1及び2右にシフトされます。

D=[512]

最初に頭に浮かぶのは配列ですが、定義にはプッシュ動作が含まれていません。


さて、組み込みのデータ構造はありませんが、二重リンクリストを使用して簡単に実装できます。
ユーザーが見つかりません

1
キューから継承するラッパーを使用するのはどうですか?次に、メソッドを追加しますvoid push_replace(T val) { pop(); push(val); }
フランチェスコドンディ

@FrancescoDondiはおそらくT push_replace(T val) { T old = pop(); push(val); return old; }
バルバカ

1
今間違いなくあります:あなたは非公式にそれを定義しました。よく知られているかどうか、一般的に合意されたインターフェースを持っているかどうか、実装が利用できるかどうかを尋ねるべきでしょう(最後の問題が大きい問題ではない)。
PJTraill

@valbaca pop()複雑なオブジェクトをコピーする例外の場合、スタックの巻き戻しの問題のために何も返さないC ++を考えているので、front()破棄する前に必要な場合は前に使用することになっています。しかし、例外を気にしないのであれば、あなたのやり方はより良いものになるでしょう。
フランチェスコドンディ

回答:


44

固定サイズのキューは、一部の人々が循環バッファーと呼ぶものを使用して実装されることがよくあります。いっぱいにならないように保護を解除すると、目的の動作が得られます。

もちろん、実際のプッシュは配列内で行われません-それはあまりにも高価です-しかし、それは外からはそれのように見えます


コメントは詳細なディスカッション用ではありません。この会話はチャットに移動さました
ラファエル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.