#include <iostream>
#include <vector>
#include <algorithm>
struct A{
int a;
A(): a(0){}
void operator()(int i) {
if(i) a++;
std::cout << "a:" << a << " @" << &a << std::endl;
}
};
int main(int argc, char *argv[]) {
//test data
std::vector<int> vec;
vec.push_back(1);
vec.push_back(1);
vec.push_back(0);
//accumulator
A accum;
std::for_each(vec.begin(), vec.end(), accum);
std::cout << "non-zero elements:" << accum.a << " @" << &accum.a << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8YWxnb3JpdGhtPgoKc3RydWN0IEF7CiAgICBpbnQgYTsKICAgIEEoKTogYSgwKXt9CgogICAgdm9pZCBvcGVyYXRvcigpKGludCBpKSB7CiAgICAgICAgaWYoaSkgICBhKys7CiAgICAgICAgc3RkOjpjb3V0IDw8ICJhOiIgPDwgYSA8PCAiICBAIiA8PCAmYSA8PCBzdGQ6OmVuZGw7CiAgICB9Cn07CgppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKSB7CiAgICAvL3Rlc3QgZGF0YQogICAgc3RkOjp2ZWN0b3I8aW50PiB2ZWM7CiAgICB2ZWMucHVzaF9iYWNrKDEpOwogICAgdmVjLnB1c2hfYmFjaygxKTsKICAgIHZlYy5wdXNoX2JhY2soMCk7CgogICAgLy9hY2N1bXVsYXRvcgogICAgQSBhY2N1bTsKCiAgICBzdGQ6OmZvcl9lYWNoKHZlYy5iZWdpbigpLCB2ZWMuZW5kKCksIGFjY3VtKTsKICAgIHN0ZDo6Y291dCA8PCAibm9uLXplcm8gZWxlbWVudHM6IiA8PCBhY2N1bS5hIDw8ICIgIEAiIDw8ICZhY2N1bS5hIDw8IHN0ZDo6ZW5kbDsKCiAgICByZXR1cm4gMDsKfQ==