2015-04-06 51 views
0

我希望能夠做一些事情,如:如何實現地圖,過濾器,均價在C++ 98

std::list<Person> personList; 

std::list<Person> filteredPersonList; 

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

filteredPersonList = filter(personList, filterByAge) 
+1

對於['std :: list <> :: remove_if'](http://en.cppreference.com/w/cpp/container),我無法發現任何關於C++ 98的限制/列出/刪除)。 –

+2

'std :: transform','std :: copy_if','std :: accumulate'? –

回答

0

我認爲你正在尋找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); 
0

只爲記錄:

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; 
}