#include <iostream>
#include <vector>
using namespace std;
template<class InputIt, class UnaryPredicate>
typename iterator_traits<InputIt>::difference_type
Count_if(InputIt first, InputIt last, UnaryPredicate * p)
{
typename iterator_traits<InputIt>::difference_type ret = 0;
for (; first != last; ++first) {
if (p(*first)) {
ret++;
}
}
return ret;
}
bool even(int i)
{
return i%2 == 0;
}
int main(int argc, const char * argv[])
{
vector<int> v = { 1,2,3,4,5,6,7,8,9,0};
int total = 0;
//cout << Count_if(v.begin(),v.end(),[](int x) { return x%2 == 0; }) << endl;
//cout << Count_if(v.begin(),v.end(),[&total](int x) { ++total; return x%2 == 0; }) << endl;
cout << Count_if(v.begin(),v.end(),even) << endl;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdGVtcGxhdGU8Y2xhc3MgSW5wdXRJdCwgY2xhc3MgVW5hcnlQcmVkaWNhdGU+CnR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxJbnB1dEl0Pjo6ZGlmZmVyZW5jZV90eXBlCiAgICBDb3VudF9pZihJbnB1dEl0IGZpcnN0LCBJbnB1dEl0IGxhc3QsIFVuYXJ5UHJlZGljYXRlICogcCkKewogICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPElucHV0SXQ+OjpkaWZmZXJlbmNlX3R5cGUgcmV0ID0gMDsKICAgIGZvciAoOyBmaXJzdCAhPSBsYXN0OyArK2ZpcnN0KSB7CiAgICAgICAgaWYgKHAoKmZpcnN0KSkgewogICAgICAgICAgICByZXQrKzsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gcmV0Owp9Cgpib29sIGV2ZW4oaW50IGkpCnsKICAgIHJldHVybiBpJTIgPT0gMDsKfQoKaW50IG1haW4oaW50IGFyZ2MsIGNvbnN0IGNoYXIgKiBhcmd2W10pCnsKICAgIHZlY3RvcjxpbnQ+IHYgPSB7IDEsMiwzLDQsNSw2LDcsOCw5LDB9OwoKICAgIGludCB0b3RhbCA9IDA7CiAgICAvL2NvdXQgPDwgQ291bnRfaWYodi5iZWdpbigpLHYuZW5kKCksW10oaW50IHgpIHsgcmV0dXJuIHglMiA9PSAwOyB9KSA8PCBlbmRsOwogICAgLy9jb3V0IDw8IENvdW50X2lmKHYuYmVnaW4oKSx2LmVuZCgpLFsmdG90YWxdKGludCB4KSB7ICsrdG90YWw7IHJldHVybiB4JTIgPT0gMDsgfSkgPDwgZW5kbDsKICAgIGNvdXQgPDwgQ291bnRfaWYodi5iZWdpbigpLHYuZW5kKCksZXZlbikgPDwgZW5kbDsKCn0K