Szukam struktury danych, która wypchnie jej najstarszy / ostatni element, jeśli wstawiony zostanie nowy element. Na przykład niech D
reprezentuje strukturę. D
zawiera 3 elementy Number
D
wartości domyślnych tego typu będą inicjowane do 1, 2
i 3
.
Jeśli Number
to zawiera wartość 5
jest włożona D
, 3
zostanie wypchnięty, natomiast 1
i 2
są przesunięte w prawo.
Pierwszą rzeczą, która przychodzi na myśl, będzie tablica, ale definicja nie obejmuje zachowania polegającego na wypychaniu.
data-structures
arrays
queues
Greg M.
źródło
źródło
void push_replace(T val) { pop(); push(val); }
.T push_replace(T val) { T old = pop(); push(val); return old; }
pop()
nic nie zwraca ze względu na problemy z rozwijaniem stosu w przypadku wyjątków kopiowania złożonego obiektu, więc powinieneś użyć gofront()
wcześniej, jeśli potrzebujesz go przed odrzuceniem. Ale oczywiście, jeśli nie przejmujesz się wyjątkami, Twoja droga może być lepsza.Odpowiedzi:
Kolejki o stałym rozmiarze są często implementowane przy użyciu tego, co niektórzy nazywają buforami okrągłymi . Jeśli usuniesz ochronę przed jej wypełnieniem, uzyskasz pożądane zachowanie.
Oczywiście w tablicy nie nastąpi żadne rzeczywiste wypychanie - byłoby to zbyt drogie - ale będzie to wyglądać z zewnątrz.
źródło