#include <iostream>
#include <algorithm>
#include <numeric>
#include <vector>
template<typename Container, typename Transform>
void transform_container(Container & container, Transform transform) {
std::transform(std::begin(container), std::end(container),
std::begin(container), /* requires output iterator */
transform);
}
template<typename T, typename Container>
auto inner_product_self(Container&& container, T initial) {
return std::inner_product(std::begin(container), std::end(container),
std::begin(container),
initial);
}
int main() {
std::vector<int> v(2);
std::iota(std::begin(v), std::end(v), 0);
transform_container(v, [](auto i) { return i + 2; });
transform_container(v, [](auto i) { return i * 3; });
auto result = inner_product_self(v, 0);
std::cout << "result: " << result;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8bnVtZXJpYz4KI2luY2x1ZGUgPHZlY3Rvcj4KCnRlbXBsYXRlPHR5cGVuYW1lIENvbnRhaW5lciwgdHlwZW5hbWUgVHJhbnNmb3JtPgp2b2lkIHRyYW5zZm9ybV9jb250YWluZXIoQ29udGFpbmVyICYgY29udGFpbmVyLCBUcmFuc2Zvcm0gdHJhbnNmb3JtKSB7CiAgc3RkOjp0cmFuc2Zvcm0oc3RkOjpiZWdpbihjb250YWluZXIpLCBzdGQ6OmVuZChjb250YWluZXIpLAogICAgICAgICAgICAgICAgIHN0ZDo6YmVnaW4oY29udGFpbmVyKSwgLyogcmVxdWlyZXMgb3V0cHV0IGl0ZXJhdG9yICovCiAgICAgICAgICAgICAgICAgdHJhbnNmb3JtKTsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQ29udGFpbmVyPgphdXRvIGlubmVyX3Byb2R1Y3Rfc2VsZihDb250YWluZXImJiBjb250YWluZXIsIFQgaW5pdGlhbCkgewogIHJldHVybiBzdGQ6OmlubmVyX3Byb2R1Y3Qoc3RkOjpiZWdpbihjb250YWluZXIpLCBzdGQ6OmVuZChjb250YWluZXIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpiZWdpbihjb250YWluZXIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbCk7Cn0KCgppbnQgbWFpbigpIHsKICBzdGQ6OnZlY3RvcjxpbnQ+IHYoMik7CiAgc3RkOjppb3RhKHN0ZDo6YmVnaW4odiksIHN0ZDo6ZW5kKHYpLCAwKTsKCiAgdHJhbnNmb3JtX2NvbnRhaW5lcih2LCBbXShhdXRvIGkpIHsgcmV0dXJuIGkgKyAyOyB9KTsKICB0cmFuc2Zvcm1fY29udGFpbmVyKHYsIFtdKGF1dG8gaSkgeyByZXR1cm4gaSAqIDM7IH0pOwogIAogIGF1dG8gcmVzdWx0ID0gaW5uZXJfcHJvZHVjdF9zZWxmKHYsIDApOwoKICBzdGQ6OmNvdXQgPDwgInJlc3VsdDogIiA8PCByZXN1bHQ7Cn0=