函数复合
题目描述
数学上,函数之间存在一种二元运算“复合”,记函数 和函数 的复合为 ,定义 。
请使用 Lambda 表达式实现函数复合。你需要补充 compose
,它接受两个函数指针 g
和 f
,返回一个函数 。
所有函数的定义域和陪域都是 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;
}