c++中如何组合多个predicate

avatar
作者
猴君
阅读量: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过滤向量,并输出过滤后的结果。

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!