int _arr[] = {1,2,3,4,5,6,7};
std::vector<int> arr(_arr, _arr+7);
auto itr = std::remove_if(arr.begin(), arr.end(), [](int i)->bool{
if(i%2 == 0)
return true;
return false;
});
arr.erase(itr, arr.end());
用法如上,之所以最後要erase,見源碼:
template<class ForwardIterator, class UnaryPredicate>
ForwardIterator remove_if(ForwardIterator first, ForwardIterator last,
UnaryPredicate p)
{
ForwardIterator result = first;
for (; first != last; ++first)
if (!p(*first)) {
*result++ = *first;
}
}
return result;
}