Я шукаю структуру даних, яка виштовхне його найстаріший / останній елемент, якщо вставити новий елемент. Наприклад, нехай Dпредставляє структуру. Dмістить 3 елементи Number Dтипових значень типу буде ініціалізовано до 1, 2та 3.
Якщо Numberщо містить значення 5вставляється D, 3буде виштовхувати, в той час як 1і 2зрушені вправо.
Перше, що спадає на думку, був би масив, але визначення не включає поведінку, що підштовхує.
Ну, немає вбудованої структури даних, але це просто реалізувати, використовуючи подвійний список, пов'язаний зі списком, правда?
—
Користувача не знайдено
А як щодо використання обгортки, успадкованого з черги? Потім ви додаєте метод
—
Франческо Донді
void push_replace(T val) { pop(); push(val); }.
@FrancescoDondi, мабуть, має бути
—
valbaca
T push_replace(T val) { T old = pop(); push(val); return old; }
Однозначно є зараз: ви просто неофіційно це визначили; можливо, ви повинні запитати, чи добре він відомий, чи є загально узгоджений інтерфейс і чи доступні реалізації (не те, що остання є великою проблемою).
—
PJTraill
@valbaca Я думаю про C ++, де
—
Франческо Донді
pop()нічого не повертається через проблеми з розмотуванням стека у випадку, якщо винятки копіюють складний об'єкт, тому ви повинні використовувати його front()раніше, якщо вам це потрібно, перш ніж відкинути. Але впевнено, якщо ви не переймаєтесь винятками, ваш шлях може бути кращим.