關於std::remove_if

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章