函数复合

题目描述

数学上,函数之间存在一种二元运算“复合”,记函数 和函数 的复合为 ,定义

请使用 Lambda 表达式实现函数复合。你需要补充 compose,它接受两个函数指针 gf,返回一个函数

所有函数的定义域和陪域都是 double 的表示范围。

关于输入

一行,一个浮点数 x。

关于输出

一行,x,保留小数点后六位。

易错点提示

  • 由于指针 f g 是局部变量,在 Lambda 中使用引用捕获会造成悬垂引用。

参考答案

#include <iostream>
#include <cmath>

int main() {
    auto compose = [](double (*g)(double), double (*f)(double)) {
        return [=](double x) {
            return g(f(x));
        };
    };
    double x;
    std::cin >> x;
    auto id = compose(std::asin, std::sin);
    std::cout << std::fixed << id(x) << std::endl;
}