Я хочу иметь возможность сделать что-то вроде:
std::list<Person> personList;
std::list<Person> filteredPersonList;
Person filterByAge(Person p){
if(p.age >= 18) return p;
}
filteredPersonList = filter(personList, filterByAge)
Я хочу иметь возможность сделать что-то вроде:
std::list<Person> personList;
std::list<Person> filteredPersonList;
Person filterByAge(Person p){
if(p.age >= 18) return p;
}
filteredPersonList = filter(personList, filterByAge)
Я думаю, вы ищете remove_copy_if
:
std::list<Person> personList;
std::list<Person> filteredPersonList;
Person filterByAge(Person p){
if(p.age >= 18) return false;
}
std::remove_copy_if(personList.begin(), personList.end(), std::inserter(filteredPersonList, filteredPersonList.end()), filterByAge);
Только для записи:
template<
class IN_TYPE,
template < class IN_TYPE, class A = std::allocator< IN_TYPE > > class COLLECTION
> COLLECTION< IN_TYPE > filter (const COLLECTION< IN_TYPE >& collection, bool (*f) ( const IN_TYPE& ) )
{
COLLECTION< IN_TYPE > result;
typename COLLECTION< IN_TYPE >::const_iterator it;
//std::copy_if( collection.begin(), collection.end(), result.begin(), f );
for( it = collection.begin() ; it != collection.end() ; ++it )
{
IN_TYPE node = *it;
bool passedFilter = f(node);
if (passedFilter)
result.push_back(node);
}
return result;
}
std::list<>::remove_if
. - person πάντα ῥεῖ   schedule 06.04.2015