Я шукаю структуру даних, яка виштовхне його найстаріший / останній елемент, якщо вставити новий елемент. Наприклад, нехай 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()
раніше, якщо вам це потрібно, перш ніж відкинути. Але впевнено, якщо ви не переймаєтесь винятками, ваш шлях може бути кращим.