Пропуски Junior Алгоритмы STL и ranges обновлено

Идиомы удаления

Вопрос

Удалить из вектора все нули: v.erase(std::__(1)__(v.begin(), v.end(), 0), v.end());. Удалить подряд идущие дубликаты из отсортированного вектора: v.erase(std::__(2)__(v.begin(), v.end()), v.end());.

Попробуйте сами

Заполните пропуски по номерам.

1
2
Показать ответ и разбор

Коротко

std::remove сдвигает оставляемые элементы к началу, std::unique схлопывает соседние равные. Оба возвращают новый логический конец, а erase отрезает хвост.

Что в пропусках

1

remove

2

unique

Разбор

std::remove сдвигает оставляемые элементы к началу, std::unique схлопывает соседние равные. Оба возвращают новый логический конец, а erase отрезает хвост. В C++20 первую строку заменяет std::erase(v, 0).

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.