#include <iostream>
#include <vector>
using namespace std;
//4. Implement count_if() yourself. Test it.
template<typename Iter, typename Predicate>
typename iterator_traits<Iter>::value_type
count_if(Iter first, Iter last, Predicate pred)
{
typename iterator_traits<Iter>::value_type sum = 0;
for (Iter it = first; it != last; it++)
{
if (pred(*it)) // trouble here?
{
sum++;
}
}
return sum;
}
int main()
{
vector<int> v {1, 2, 3, 1, 5, -1};
cout << count_if(v.begin(), v.end(), [](int n) { return n > 1; }) << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCi8vNC4gSW1wbGVtZW50IGNvdW50X2lmKCkgeW91cnNlbGYuIFRlc3QgaXQuCgp0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyLCB0eXBlbmFtZSBQcmVkaWNhdGU+CnR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxJdGVyPjo6dmFsdWVfdHlwZQpjb3VudF9pZihJdGVyIGZpcnN0LCBJdGVyIGxhc3QsIFByZWRpY2F0ZSBwcmVkKQp7CiAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8SXRlcj46OnZhbHVlX3R5cGUgc3VtID0gMDsKICAgIGZvciAoSXRlciBpdCA9IGZpcnN0OyBpdCAhPSBsYXN0OyBpdCsrKQogICAgewogICAgICAgIGlmIChwcmVkKCppdCkpIC8vIHRyb3VibGUgaGVyZT8KICAgICAgICB7CiAgICAgICAgICAgIHN1bSsrOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiBzdW07Cn0KCmludCBtYWluKCkKewogICAgdmVjdG9yPGludD4gdiB7MSwgMiwgMywgMSwgNSwgLTF9OwogICAgY291dCA8PCBjb3VudF9pZih2LmJlZ2luKCksIHYuZW5kKCksIFtdKGludCBuKSB7IHJldHVybiBuID4gMTsgfSkgPDwgZW5kbDsKICAgIHJldHVybiAwOwp9Cg==