Erase remove

Назначение

Идиома Erase-remove относится к алгоритмической операции, которая используется для удаления элементов из контейнера на основе заданного критерия удаления, сохраняя порядок расположения элементов.

Решаемые задачи

  • Отсутствие смещения элементов, расположенных после удаленного элемента.

При удалении элементов из контейнера с помощью метода erase() может возникнуть смещение всех элементов, расположенных после удаленного элемента. Это может привести к ошибкам в работе программы. Идиома решает эту задачу, позволяя эффективно удалять элементы, перемещая их в конец контейнера, а затем удалить все элементы, расположенные в конце. Таким образом, порядок оставшихся элементов сохраняется, и не происходит ненужного смещения элементов.

Обащая реализация на языке C++

Удаление происходит в два этапа:

  1. Метод remove() перемещает все элементы, не удовлетворяющие условию, в начало контейнера, а затем возвращает итератор на элемент, следующий за последним перемещенным элементом.

  2. Метод erase() удаляет элементы, начиная с указанного итератора до конца контейнера.

int main() {
    std::vector<int> vec = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

    vec.erase(std::remove_if(vec.begin(), vec.end(), [](int x)
    {
        return x % 2 == 0; 
    }), vec.end());
}

Last updated

Was this helpful?