C++ 如何在C+中实现映射、过滤、折叠+;98

C++ 如何在C+中实现映射、过滤、折叠+;98,c++,functional-programming,c++98,C++,Functional Programming,C++98,我希望能够做到以下几点: std::list<Person> personList; std::list<Person> filteredPersonList; Person filterByAge(Person p){ if(p.age >= 18) return p; } filteredPersonList = filter(personList, filterByAge) std::列出个人列表; 标准::列表过滤器个人列表; 人员过滤器路径(人

我希望能够做到以下几点:

std::list<Person> personList;

std::list<Person> filteredPersonList;

Person filterByAge(Person p){
  if(p.age >= 18) return p;
}

filteredPersonList = filter(personList, filterByAge)
std::列出个人列表;
标准::列表过滤器个人列表;
人员过滤器路径(人员p){
如果(p.age>=18)返回p;
}
filteredPersonList=过滤器(personList,filterByAge)

我想您正在寻找
删除\u复制\u,如果

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);
std::列出个人列表;
标准::列表过滤器个人列表;
人员过滤器路径(人员p){
如果(p.age>=18)返回false;
}
std::remove_copy_if(personList.begin()、personList.end()、std::inserter(filteredPersonList、filteredPersonList.end()、filterBage);
仅供记录:

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;
}
模板<
类的类型,
模板>类集合
>集合过滤器(常量集合&集合,bool(*f)(常量IN_TYPE&))
{
收集结果;
typename集合::const_迭代器;
//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(节点);
if(passedFilter)
结果。推回(节点);
}
返回结果;
}

我看不出关于c++98的任何限制。
std::transform
std::copy\u if
std::acculate