【问题标题】:C++: Using remove_if to filter vector on a conditionC++:使用 remove_if 过滤条件向量
【发布时间】:2018-12-01 20:04:56
【问题描述】:

使用 erase+remove_if 删除向量中小于特定值的所有元素的正确语法是什么。但是,这个特定的值不是一个常数,而是一个变量。

请参阅代码以更好地理解问题:

for (int i = 0; i < arr.size(); i++)
{
    int currEle = arr[i];

    /*
        How do I use erase + remove_if to remove the elements from arr that
        are smaller than currEle? 
    */

}

【问题讨论】:

    标签: c++ algorithm vector erase


    【解决方案1】:

    下面的例子演示了erase-remove_if 的用法。 limit 是通过引用捕获的,因此可以在 lambda 之外进行修改:

    #include <vector>
    #include <algorithm>
    #include <iostream>
    int main()
    {
        std::vector<int> vec{0,1,2,3,4,5,6,7,8,9};
        int size = vec.size();
        for (int limit = 0; limit <= size; limit++)
        {
            vec.erase(std::remove_if(std::begin(vec), std::end(vec), [&limit](int i) {
                return i < limit;
            }), std::end(vec));
            for (auto& v : vec)
                std::cout << v;
            std::cout << std::endl;
        }
        return 0;
    }
    

    预期输出:

    0123456789
    123456789
    23456789
    3456789
    456789
    56789
    6789
    789
    89
    9
    

    【讨论】:

    • 很高兴您提供了答案。如果你能给出一些简单的解释性文字,这对试图解决问题的人会更有帮助,不仅是最初的提问者,还有其他人将来会来到这个页面。
    猜你喜欢
    • 2019-10-23
    • 1970-01-01
    • 1970-01-01
    • 2014-06-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-12
    • 2022-01-10
    • 2019-01-07
    相关资源
    最近更新 更多