C++ 如何从头文件中删除0-25之外的数字?

C++ 如何从头文件中删除0-25之外的数字?,c++,c++14,c++17,point-cloud-library,point-clouds,C++,C++14,C++17,Point Cloud Library,Point Clouds,我有PointCloud.h,它在那里给出了分数。我在头文件中写了如下内容: void RadiusOutlierFilter::filter(点云和pc){ 标准::移除_if(pc.points(),pc.points()+pc.pointNumber(),[](常量点和点) { 回报率(p25); }); } 我写这篇文章时不知道remove\u if()的作用。我相信这样我就可以去掉0以下大于25的点,对吗?如何返回0-25之间的数字?如果您能修复代码,我将非常感激,我现在非常绝望,因

我有
PointCloud.h
,它在那里给出了分数。我在头文件中写了如下内容:

void RadiusOutlierFilter::filter(点云和pc){
标准::移除_if(pc.points(),pc.points()+pc.pointNumber(),[](常量点和点)
{
回报率(p<0&&p>25);
});
}
我写这篇文章时不知道
remove\u if()
的作用。我相信这样我就可以去掉0以下大于25的点,对吗?如何返回0-25之间的数字?如果您能修复代码,我将非常感激,我现在非常绝望,因为我无法理解它,它给我带来了压力。

有点欺骗,因为它实际上没有删除任何内容。相反,它会将所有不符合删除条件的值移到容器的开头,覆盖符合删除条件的值。它返回指向第一个“已删除”项的迭代器。但从该点开始的条目不一定是删除的值;其内容未详

因此,你需要了解这个问题。下面是一个例子:

#include <vector>
#include <algorithm>
#include <iterator>
#include <iostream>

void filter(std::vector<int>& vec)
{
    vec.erase(std::remove_if(begin(vec), end(vec),
                [](int n) { return n < 0 ||  n > 25; }),
            end(vec));
}

int main()
{
    std::vector<int> vec = {27, 1, 9, 6, 93, 73, 22, 25, 0, 18, 73};

    std::cout << "Original: ";
    std::copy(begin(vec), end(vec), std::ostream_iterator<int>(std::cout, " "));
    std::cout << '\n';

    filter(vec);
    std::cout << "Filtered: ";
    std::copy(begin(vec), end(vec), std::ostream_iterator<int>(std::cout, " "));
    std::cout << '\n';
}

还要注意,您的比较是不正确的,并且总是会产生
false
,因为没有小于0和大于25的数字。

如果您使用
remove_If()
而不阅读和理解它的实际功能,你会感到非常困惑。
怎么能同时是
<0
>25
?我认为你的陈述总是会被认为是错误的,所以不会删除任何内容。您可能打算使用
|
而不是
&
。还要注意的是,
remove\u if()
实际上并没有删除任何内容,它只是将“已删除”的元素移动到指定范围的末尾,然后您必须“擦除”这些元素才能从容器中实际删除它们
Original: 27 1 9 6 93 73 22 25 0 18 73 
Filtered: 1 9 6 22 25 0 18