c++ - 使用可变参数模板的平方和
问题描述
我正在尝试使用可变参数模板找到平方和。输入参数是需要计算平方和的数字。例如:foo(2, 3, 4)
应该返回一个值27
(即2+(9+16)
)。我的模板函数如下所示:
template<typename T>
T foo(T args)
{
return args*args;
}
template <typename T, typename... A>
T foo(T first, A... args)
{
return first+foo(pow(args,2)...);
}
然而,这个函数的结果似乎是 261,这不是我所期望的。
解决方案
简答:2 + 9 + 256 = 267
让我们扩展一下:
foo(2, 3, 4) => 2 + foo(pow(args, 2)...)
=> 2 + foo(pow(3, 2), pow(4, 2))
=> 2 + foo(9, 16)
=> 2 + (9 + foo(16))
=> 2 + (9 + 16 * 16)
=> 267
Hello world!
如果你想把它做对,不要pow()
多次使用一个值:
template <typename T>
T foo(T arg)
{
return arg * arg;
}
template <typename T, typename... A>
T foo(T first, A... args)
{
return first * first + foo(args...);
// ^^^^^^^^^^^^^ or pow(first, 2)
}
推荐阅读
- node.js - 无法识别的数据类型 Sequelize Postgres
- django - TypeError:“DeferredAttribute”对象在 models.py 中不可下标
- video - 如何使用 gstreamer 保存修改后的视频的结果?
- python - 如何根据包含的字符串分配类别
- arrays - Ansible XML Array 获取数组中的元素
- oracle - Oracle 和 EF Core BoolToTwoValuesConverter 未转换
- r - 如何使 R 中的 system() 打印所有控制台输出?
- javascript - 在另一个 JS 文件中为基于 Angular 的 Web 应用程序实例化 JS 类
- google-sheets - Bash 在脚本中循环和散列值
- oracle-apex - Oracle APEX 如何在列表视图中显示静态文件图像?