C++ list使用remove_if 移除所有小于n的数字

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ list使用remove_if 移除所有小于n的数字相关的知识,希望对你有一定的参考价值。

假如移除小于10的数字:
bool CanRemove(int n)


return n<10;


int main()

std::list<int> lstNum;
lstNum.push_back(1);
lstNum.push_back(2);
lstNum.push_back(10);
lstNum.push_back(11);
lstNum.remove_if(CanRemove);
return 0;
参考技术A 你的程序是这个功能么。

C++:使用 remove_if 过滤条件向量

【中文标题】C++:使用 remove_if 过滤条件向量【英文标题】:C++: Using remove_if to filter vector on a condition 【发布时间】: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? 
    */


【问题讨论】:

【参考方案1】:

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

#include <vector>
#include <algorithm>
#include <iostream>
int main()

    std::vector<int> vec0,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

【讨论】:

很高兴您提供了答案。如果你能给出一些简单的解释性文字,这对试图解决问题的人会更有帮助,不仅是最初的提问者,还有其他人将来会来到这个页面。

以上是关于C++ list使用remove_if 移除所有小于n的数字的主要内容,如果未能解决你的问题,请参考以下文章

remove_if erase

如何使用 Boost lambda 将 remove_if 与 UUID 比较应用?

opencv 二值图像剔除小连通区域

有没有更好的替代 std::remove_if 从向量中删除元素的方法?

stl变易算法

C++ 数组转数字