Есть ли лучшая альтернатива 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
не может изменить размер вектора (как следует из его названия), потому что он получает только итераторы. Но многие разработчики, в том числе и я, не понимают этого с самого начала.
Так есть ли более безопасный и, надеюсь, более элегантный способ добиться этого? Если нет, то почему?