Где находится erase_if? - PullRequest
       4

Где находится erase_if?

15 голосов
/ 06 августа 2010

У меня есть контейнер, и я хотел бы удалить элементы на основе предиката.erase_if звучит знакомо, но я не могу найти его в C ++.Какое имя и где оно определено?Я хотел бы использовать его с лямбда в VS10.

Ответы [ 5 ]

19 голосов
/ 06 августа 2010

Вы, вероятно, ищете std::remove_if, например,

vec.erase(std::remove_if(vec.begin(), vec.end(), predicate), vec.end());
5 голосов
/ 15 мая 2017

Это в Основы библиотеки v2 , а вскоре и в C ++ 20 .

4 голосов
/ 06 августа 2010

Полагаю, вы думаете о remove_if, который использует предикат для определения необходимости удаления элемента.

remove_if возвращает итератор, указывающий наначало элементов для удаления в контейнере.Чтобы фактически удалить их, вам нужно использовать erase:

container.erase(remove_if(container.start(), container.end(), pred), container.end())

Или это, или, возможно, вы ошибочно вспомнили алгоритм copy_if?Который каким-то образом остался вне стандарта, но был написан и реализован в Effective STL .

2 голосов
/ 30 марта 2012

На самом деле в библиотеке Boost существует метод с именем erase_if для контейнеров указателей .

0 голосов
/ 06 августа 2010

Существует list::remove_if, но не для всех контейнерных классов. remove_if также существует как алгоритм, который можно использовать с итераторами, которые можно получить из begin() и end().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...