在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
過濾向量,并輸出過濾后的結果。