🕵️
Введение в паттерны
  • Введение в паттерны
  • Паттерны
    • Оглавление
    • Порождающие паттерны
      • Фабричный метод
        • Реализации на С++
        • Реализации на Kotlin
        • Возможные реализации для решения конкретных задач на С++
      • Абстрактная фабрика
        • Реализации на С++
        • Реализации на Kotlin
        • Возможные реализации для решения конкретных задач на С++
      • Прототип
        • Реализации на С++
        • Реализации на Kotlin
        • Реализации на Java
        • Возможные реализации для решения конкретных задач на С++
      • Строитель
        • Реализации на С++
        • Реализации на Kotlin
      • Одиночка
        • Реализации на C++
        • Реализации на Kotlin
        • Возможные реализации для решения конкретных задач на С++
      • Пул объектов
        • Реализации на С++
    • Структурные паттерны
      • Адаптер
        • Реализации на С++
        • Реализации на Kotlin
        • Возможные реализации для решения конкретных задач
      • Декоратор
        • Реализации на С++
        • Реализации на Kotlin
      • Компоновщик
        • Реализации на С++
      • Мост
        • Реализации на С++
      • Заместитель
        • Реализации на С++
        • Реализации на Kotlin
      • Фасад
        • Реализации на С++
      • Приспособленец
        • Реализации на С++
    • Поведенческие паттерны
      • Стратегия
        • Реализации на С++
        • Реализации на Kotlin
      • Команда
        • Реализации на С++
        • Реализации на Kotlin
      • Цепочка обязанностей
        • Реализации на С++
        • Реализации на Kotlin
      • Подписчик-издатель
        • Реализации на С++
        • Реализации на Kotlin
      • Посетитель
        • Реализации на С++
        • Возможные реализации для решения конкретных задач
      • Посредник
        • Реализации на С++
        • Реализации на Kotlin
      • Шаблонный метод
        • Реализации на С++
      • Опекун
        • Реализации на С++
      • Итератор
        • Реализации на С++
        • Реализации на Kotlin
      • Свойство
        • Реализации на С++
        • Возможные реализации для решения конкретных задач
  • Введение в идиомы
  • Идиомы
    • Оглавление
    • RAII
    • Type erasure
      • Контейнеры с type erasure
    • CRTP
    • Статический полиморфизм
    • Shrink to fit
    • Proxy
    • Erase remove
    • Decltype (auto)
    • Copy and swap
    • Safe bool
    • Scope guard
    • Addressof
Powered by GitBook
On this page
  • Назначение
  • Решаемые задачи
  • Обащая реализация на языке C++

Was this helpful?

  1. Идиомы

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());
}
PreviousProxyNextDecltype (auto)

Last updated 1 year ago

Was this helpful?