#include <algorithm>
#include <functional>
#include <iostream>
#include <vector>
using namespace std;
bool IsEven(int n) {
return (n % 2) == 0;
}
int main() {
// Test vector
vector<int> vec{ 11, 22, 33, 44, 55 };
// Using functional approach
auto n = count_if(vec.begin(), vec.end(),
bind(logical_not<bool>(),
bind(modulus<int>(), placeholders::_1, 2)));
cout << n << endl;
// Using lambdas
n = count_if(vec.begin(), vec.end(),
[](int n) { return (n % 2) == 0; });
cout << n << endl;
// Using boolean returning ad hoc function
n = count_if(vec.begin(), vec.end(), IsEven);
cout << n << endl;
}
I2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHZlY3Rvcj4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCmJvb2wgSXNFdmVuKGludCBuKSB7CiAgICByZXR1cm4gKG4gJSAyKSA9PSAwOwp9CgppbnQgbWFpbigpIHsKICAgIC8vIFRlc3QgdmVjdG9yCiAgICB2ZWN0b3I8aW50PiB2ZWN7IDExLCAyMiwgMzMsIDQ0LCA1NSB9OwogICAgCiAgICAvLyBVc2luZyBmdW5jdGlvbmFsIGFwcHJvYWNoCiAgICBhdXRvIG4gPSBjb3VudF9pZih2ZWMuYmVnaW4oKSwgdmVjLmVuZCgpLAogICAgICAgICBiaW5kKGxvZ2ljYWxfbm90PGJvb2w+KCksCiAgICAgICAgICAgICBiaW5kKG1vZHVsdXM8aW50PigpLCBwbGFjZWhvbGRlcnM6Ol8xLCAyKSkpOyAgICAKICAgIGNvdXQgPDwgbiA8PCBlbmRsOwoKICAgIC8vIFVzaW5nIGxhbWJkYXMKICAgIG4gPSBjb3VudF9pZih2ZWMuYmVnaW4oKSwgdmVjLmVuZCgpLCAKICAgICAgICAgICAgICAgICBbXShpbnQgbikgeyByZXR1cm4gKG4gJSAyKSA9PSAwOyB9KTsKICAgIGNvdXQgPDwgbiA8PCBlbmRsOwogICAgCiAgICAvLyBVc2luZyBib29sZWFuIHJldHVybmluZyBhZCBob2MgZnVuY3Rpb24KICAgIG4gPSBjb3VudF9pZih2ZWMuYmVnaW4oKSwgdmVjLmVuZCgpLCBJc0V2ZW4pOwogICAgY291dCA8PCBuIDw8IGVuZGw7Cn0K