Ich suche nach einer Datenstruktur, die sein ältestes / letztes Element herausdrückt, wenn ein neues Element eingefügt wird. Stellen Sie beispielsweise D
die Struktur dar. D
Enthält 3 Elemente, werden die Number
D
Standardwerte des Typs auf 1, 2
und initialisiert 3
.
Wenn ein Number
, der den Wert enthält, 5
eingefügt wird D
, 3
wird herausgedrückt, während 1
und 2
nach rechts verschoben werden.
Das erste, was mir einfällt, ist ein Array, aber die Definition beinhaltet nicht das Push-Verhalten.
data-structures
arrays
queues
Greg M
quelle
quelle
void push_replace(T val) { pop(); push(val); }
.T push_replace(T val) { T old = pop(); push(val); return old; }
pop()
aufgrund von Problemen mit dem Stack-Abwickeln im Falle von Ausnahmen, die ein komplexes Objekt auskopieren, nichts zurückgegeben wird. Sie sollten es alsofront()
vorher verwenden, wenn Sie es vor dem Verwerfen benötigen. Aber sicher, wenn Sie sich nicht für Ausnahmen interessieren, kann Ihr Weg besser sein.Antworten:
Feste Größe Warteschlangen werden oft implementiert , was einige Leute nennen Ringpuffer . Wenn Sie den Schutz dagegen entfernen, dass er voll ist, erhalten Sie das gewünschte Verhalten.
Natürlich wird im Array kein tatsächliches Pushing stattfinden - das wäre zu teuer - aber es wird von außen so aussehen .
quelle