Я ищу структуру данных, которая вытолкнет его самый старый / последний элемент, если новый элемент будет вставлен. Например, давайте D
представим структуру. D
содержит 3 элемента типа Number
D
значения по умолчанию будут инициализированы в 1, 2
и 3
.
Если элемент Number
, содержащий значение 5
, вставлен в D
, 3
будет вытолкнут, а 1
и 2
смещены вправо.
Первое, что приходит на ум, это массив, но определение не включает в себя поведение нажатия.
data-structures
arrays
queues
Грег М
источник
источник
void push_replace(T val) { pop(); push(val); }
.T push_replace(T val) { T old = pop(); push(val); return old; }
pop()
ничего не возвращается из-за проблем с размоткой стека в случае исключений, копирующих сложный объект, так что вы должны использовать егоfront()
раньше, если он вам нужен, прежде чем отбрасывать. Но конечно, если вас не волнуют исключения, ваш путь может быть лучше.Ответы:
Очереди фиксированного размера часто реализуются с использованием того, что некоторые люди называют циклическими буферами . Если вы снимите защиту от переполнения, вы получите желаемое поведение.
Конечно, в массиве не произойдет никакого реального нажатия - это будет слишком дорого - но это будет выглядеть как снаружи.
источник