#include <iostream>
#include <vector>
#include <functional>
#include <cmath>
double fun1(double x1, double x2)
{
double res1 = std::pow(x1,2.0)*5.0 + std::pow(x2,2)*4.0 + 14.0;
return res1;
}
std::function<double(double)> fun2(const std::vector<double> *v1, const std::vector<double> *v2, double(*f1)(double, double))
{
return [v1, v2, f1](double p) -> double
{
return f1(((*v1)[0] + p*(*v2)[0]), ((*v1)[1] + p*(*v2)[1]) );
};
}
int main()
{
double res3;
std::vector<double> v1 = { 4.0,5.0 };
std::vector<double> v2 = { -2.0,3.0 };
res3 = fun2(&v1, &v2, &fun1)(3);
std::cout << res3 << std::endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KI2luY2x1ZGUgPGNtYXRoPgoKZG91YmxlIGZ1bjEoZG91YmxlIHgxLCBkb3VibGUgeDIpCnsKICAgIGRvdWJsZSByZXMxID0gc3RkOjpwb3coeDEsMi4wKSo1LjAgKyBzdGQ6OnBvdyh4MiwyKSo0LjAgKyAxNC4wOyAKICAgIHJldHVybiByZXMxOwp9CgpzdGQ6OmZ1bmN0aW9uPGRvdWJsZShkb3VibGUpPiBmdW4yKGNvbnN0IHN0ZDo6dmVjdG9yPGRvdWJsZT4gKnYxLCBjb25zdCBzdGQ6OnZlY3Rvcjxkb3VibGU+ICp2MiwgZG91YmxlKCpmMSkoZG91YmxlLCBkb3VibGUpKQp7CiAgICByZXR1cm4gW3YxLCB2MiwgZjFdKGRvdWJsZSBwKSAtPiBkb3VibGUKICAgIHsKICAgICAgIHJldHVybiBmMSgoKCp2MSlbMF0gKyBwKigqdjIpWzBdKSwgKCgqdjEpWzFdICsgcCooKnYyKVsxXSkgKTsKICAgIH07Cn0KCmludCBtYWluKCkKewogICAgZG91YmxlIHJlczM7CiAgICBzdGQ6OnZlY3Rvcjxkb3VibGU+IHYxID0geyA0LjAsNS4wIH07CiAgICBzdGQ6OnZlY3Rvcjxkb3VibGU+IHYyID0geyAtMi4wLDMuMCB9OwogICAgcmVzMyA9IGZ1bjIoJnYxLCAmdjIsICZmdW4xKSgzKTsKCiAgICBzdGQ6OmNvdXQgPDwgcmVzMyA8PCBzdGQ6OmVuZGw7CgogICAgcmV0dXJuIDA7Cn0K