#include <iostream>
#include <algorithm>
#include <functional>
#include <vector>
#include <numeric>
using namespace std::placeholders;
template<class T>
struct multiply_range : public std::binary_function<T, T, T> {
public:
multiply_range() : i(0), j(1) { }
T operator()(T a, T b) {
/*if (!(this->i++ % 2)) {
if (this->j++ % 2)
return a * b;
} else {
this->j++;
return 0;
}*/
return (!(this->i++ % 2)) ? ((this->j++ % 2) ? a * b : 0) : (this->j++, 0);
}
private:
std::size_t i, j;
};
int main() {
std::function<int(int, int)> Multiply = std::bind<int>(multiply_range<int>(), _1, _2);
std::vector<int> vec_numsx = {1,2,3,4,5};
std::vector<int> vec_numsy = {5,6,7,8,9,10};
std::cout << std::inner_product(vec_numsx.begin(),
vec_numsx.end(),
std::next(vec_numsy.begin()),
0,
std::plus<int>(),
Multiply);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPG51bWVyaWM+CnVzaW5nIG5hbWVzcGFjZSBzdGQ6OnBsYWNlaG9sZGVyczsKIAp0ZW1wbGF0ZTxjbGFzcyBUPgpzdHJ1Y3QgbXVsdGlwbHlfcmFuZ2UgOiBwdWJsaWMgc3RkOjpiaW5hcnlfZnVuY3Rpb248VCwgVCwgVD4gewpwdWJsaWM6CiAgICBtdWx0aXBseV9yYW5nZSgpIDogaSgwKSwgaigxKSB7IH0KICAgIFQgb3BlcmF0b3IoKShUIGEsIFQgYikgewogICAgICAgLyppZiAoISh0aGlzLT5pKysgJSAyKSkgewogICAgICAgICAgIGlmICh0aGlzLT5qKysgJSAyKQogICAgICAgICAgICAgIHJldHVybiBhICogYjsKICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMtPmorKzsKICAgICAgICAJcmV0dXJuIDA7CiAgICAgICAgfSovCiAgICAgICByZXR1cm4gKCEodGhpcy0+aSsrICUgMikpID8gKCh0aGlzLT5qKysgJSAyKSA/IGEgKiBiIDogMCkgOiAodGhpcy0+aisrLCAwKTsKICAgIH0KcHJpdmF0ZToKICAgIHN0ZDo6c2l6ZV90IGksIGo7Cn07CiAKIAppbnQgbWFpbigpIHsKCXN0ZDo6ZnVuY3Rpb248aW50KGludCwgaW50KT4gTXVsdGlwbHkgPSBzdGQ6OmJpbmQ8aW50PihtdWx0aXBseV9yYW5nZTxpbnQ+KCksIF8xLCBfMik7CiAgICBzdGQ6OnZlY3RvcjxpbnQ+IHZlY19udW1zeCA9IHsxLDIsMyw0LDV9OwogICAgc3RkOjp2ZWN0b3I8aW50PiB2ZWNfbnVtc3kgPSB7NSw2LDcsOCw5LDEwfTsKICAgIHN0ZDo6Y291dCA8PCBzdGQ6OmlubmVyX3Byb2R1Y3QodmVjX251bXN4LmJlZ2luKCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZWNfbnVtc3guZW5kKCksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om5leHQodmVjX251bXN5LmJlZ2luKCkpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6cGx1czxpbnQ+KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE11bHRpcGx5KTsKICAgIHJldHVybiAwOwp9