Estou procurando uma estrutura de dados que irá empurrar seu elemento mais antigo / último se um novo elemento for inserido. Por exemplo, vamos D
representar a estrutura. D
contém 3 elementos dos Number
D
valores padrão do tipo serão inicializados para 1, 2
e 3
.
Se um Number
que contém o valor 5
for inserido D
, 3
será empurrado para fora, enquanto 1
e 2
é deslocado para a direita.
A primeira coisa que vem à mente seria uma matriz, mas a definição não inclui o comportamento de empurrar.
data-structures
arrays
queues
Greg M
fonte
fonte
void push_replace(T val) { pop(); push(val); }
.T push_replace(T val) { T old = pop(); push(val); return old; }
pop()
não retorna nada devido a problemas com o desenrolamento da pilha, no caso de exceções ao copiar um objeto complexo, então você deve usá-lofront()
antes, se precisar antes de descartar. Mas claro, se você não se importa com exceções, seu caminho pode ser melhor.Respostas:
Filas de tamanho fixo são frequentemente implementadas usando o que algumas pessoas chamam de buffers circulares . Se você remover a proteção contra a cheia, obtém o comportamento desejado.
Obviamente, nenhum empurrão real acontecerá no array - isso seria muito caro -, mas parecerá do lado de fora.
fonte