Есть ли лучшая альтернатива std :: remove_if для удаления элементов из вектора?

Задача удаления элементов с определенным свойством изstd::vector или другой контейнер подходит для реализации функционального стиля: зачем беспокоиться о циклах, освобождении памяти и правильном перемещении данных?

Однако стандартный способ сделать это в C ++ выглядит следующим образом:

std::vector<int> ints;
...
ints.erase(
    std::remove_if(ints.begin(), 
                   ints.end(),
                   [](int x){return x < 0;}),
    ints.end());

В этом примере удаляются все элементы меньше нуля из целочисленного вектора.

Я нахожу это не только некрасивым, но и простым в использовании неправильно. Ясно, чтоstd::remove_if не может изменить размер вектора (как следует из его названия), потому что он получает только итераторы. Но многие разработчики, в том числе и я, не понимают этого с самого начала.

Так есть ли более безопасный и, надеюсь, более элегантный способ добиться этого? Если нет, то почему?

Ответы на вопрос(2)

Ваш ответ на вопрос