Звучит так, будто вам нужна функция remove_copy_if
, которую лучше назвать copy_if_not
. К сожалению, функция copy_if
отсутствует в STL.
#include <vector>
#include <algorithm>
#include <iterator>
#include <iostream>
using namespace std;
typedef int CPerson;
bool HasNotScoredHundred(const CPerson & person)
{
return person < 100;
}
void Print(const CPerson & person)
{
cout << person << " ";
}
int main()
{
vector<CPerson> people;
people.push_back(CPerson(50));
people.push_back(CPerson(150));
people.push_back(CPerson(100));
people.push_back(CPerson(0));
vector<CPerson> elite;
remove_copy_if
( people.begin()
, people.end()
, back_inserter(elite)
, HasNotScoredHundred
);
for_each(people.begin(), people.end(), Print);
cout << "\n";
for_each(elite.begin(), elite.end(), Print);
}
Выход:
50 150 100 0
150 100
Конечно, если вы хотите настроить порог отметки, вы бы использовали функтор вместо функции HasNotScoredHundred
.