阅读量:0
在C++中,你可以使用标准库中的std::function
和std::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_even
和is_positive
。然后,我们创建了一个新的谓词combined_predicate
,它将这两个谓词组合在一起,要求数字既是正数又是偶数。最后,我们使用std::copy_if
和combined_predicate
过滤向量,并输出过滤后的结果。