std :: векторные элементы удаления, которые выполняют некоторые условия
Поскольку заголовок говорит, что я хочу удалить/объединить объекты в вектор, который выполняет определенные условия. Я имею в виду, что я знаю, как удалить целые числа из вектора, который имеет значение 99, например.
Устранение идиомы Скоттом Мейерсом:
vector<int> v;
v.erase(remove(v.begin(), v.end(), 99), v.end());
Но предположим, что если есть вектор объектов, который содержит переменную члена задержки. И теперь я хочу исключить все объекты, задержки которых отличаются только от определенного порога и хотят объединить/объединить их с одним объектом.
Результатом процесса должен быть вектор объектов, где разница всех задержек должна быть как минимум указанного порога.
Ответы
Ответ 1
std::remove_if
приходит на помощь!
99 будет заменен UnaryPredicate
который будет фильтровать ваши задержки, для которых я собираюсь использовать функцию лямбда.
И вот пример:
v.erase(std::remove_if(
v.begin(), v.end(),
[](const int& x) {
return x > 10; // put your condition here
}), v.end());
Ответ 2
Использование предикатной функции (идиоматический способ в С++ 11):
v.erase(remove_if(
v.begin(), v.end(), bind(greater<int>(), _1, 99)),
v.end());