#include <vector>
#include <algorithm>
#include <iostream>
int main()
{
std::vector<int> a = { 1,2,3,4,5,6,7 };
struct accu_t
{
int sum, product;
static accu_t& handle(accu_t& a, int i)
{
a.sum+=i;
a.product*=i;
return a;
}
} accum = { 0, 1 };
accum = std::accumulate(a.begin(), a.end(), accum, &accu_t::handle);
std::cout << "sum: " << accum.sum << ", product: " << accum.product << std::endl;
return 0;
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGlvc3RyZWFtPgoKaW50IG1haW4oKQp7CglzdGQ6OnZlY3RvcjxpbnQ+IGEgPSB7IDEsMiwzLDQsNSw2LDcgfTsKCglzdHJ1Y3QgYWNjdV90Cgl7CgkJaW50IHN1bSwgcHJvZHVjdDsKCQlzdGF0aWMgYWNjdV90JiBoYW5kbGUoYWNjdV90JiBhLCBpbnQgaSkKCQl7CgkJCWEuc3VtKz1pOwoJCQlhLnByb2R1Y3QqPWk7CgkJCXJldHVybiBhOwoJCX0KCX0gYWNjdW0gPSB7IDAsIDEgfTsKCglhY2N1bSA9IHN0ZDo6YWNjdW11bGF0ZShhLmJlZ2luKCksIGEuZW5kKCksIGFjY3VtLCAmYWNjdV90OjpoYW5kbGUpOwoKCXN0ZDo6Y291dCA8PCAic3VtOiAiIDw8IGFjY3VtLnN1bSA8PCAiLCBwcm9kdWN0OiAiIDw8IGFjY3VtLnByb2R1Y3QgPDwgc3RkOjplbmRsOwoKCXJldHVybiAwOwp9Cg==