温馨提示×

c++中如何组合多个predicate

c++
小樊
85
2024-09-15 16:41:47
栏目: 编程语言
C++开发者专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

在C++中,你可以使用标准库中的std::functionstd::bind来组合多个谓词(predicate)

#include<iostream>
#include<vector>
#include<algorithm>
#include<functional>

bool is_even(int n) {
    return n % 2 == 0;
}

bool is_positive(int n) {
    return n > 0;
}

int main() {
    std::vector<int> numbers = {-2, -1, 0, 1, 2, 3, 4, 5, 6};

    // 创建一个组合谓词,要求数字既是正数又是偶数
    std::function<bool(int)> combined_predicate = [](int n) {
        return is_even(n) && is_positive(n);
    };

    // 使用组合谓词过滤向量
    std::vector<int> filtered_numbers;
    std::copy_if(numbers.begin(), numbers.end(), std::back_inserter(filtered_numbers), combined_predicate);

    // 输出过滤后的结果
    for (int number : filtered_numbers) {
        std::cout<< number << " ";
    }

    return 0;
}

在这个示例中,我们定义了两个简单的谓词:is_evenis_positive。然后,我们创建了一个新的谓词combined_predicate,它将这两个谓词组合在一起,要求数字既是正数又是偶数。最后,我们使用std::copy_ifcombined_predicate过滤向量,并输出过滤后的结果。

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

推荐阅读:如何定义c++中的predicate函数

0