c++ - 如何使用指针编写具有可变数量参数的函数?
问题描述
所以我的任务是使用指针编写一个具有可变数量参数的函数“mult”。这个函数必须计算浮点数的乘积。
我遵循了我们大学给我们的指南,但我的产品仍然等于零。我发现问题在于要相乘的每个其他数字都为零。
#include <iostream>
using namespace std;
int mult(int k,...){
int* p = &k;
int m = 1;
for(; k != 0; k--){
m *= *(++p);
}
return m;
}
int main(){
float res1 = mult(11,45,10,9,8,7,6,5,4,3,2,2);
float res2 = mult(7,12,23,0.3,0.6,1,2);
float res3 = mult(3,0.6,-12,-0.9);
cout << "Your results are:\n"
<<res1<<"\n"
<<res2<<"\n"
<<res3<<"\n";
return 0;
}
以下是指南中的示例:
void Print_stor(int k, ...)
{
int n=k;
int a[n];
int *p = &k;
for ( ; k!=0;k--)
a[k-1]=*(++p);
for(int i=n-1; i>=0; i--)
printf("%i ", a[i]);
printf("\n");
}
int sum(int k, …)
{
int *p = &k;
int s=0;
for ( ; k!=0; k--)
s+=*(++p);
return s;
解决方案
您可以编写mult
为可变参数函数,并使用std::accumulate
withstd::multiplies
作为运算符。
#include <functional>
#include <initializer_list>
#include <iostream>
#include <numeric>
template<typename T, typename... Args>
T mult(T t, Args... args)
{
std::initializer_list<T> values{args...};
return std::accumulate(values.begin(), values.end(), t, std::multiplies<T>());
}
int main()
{
std::cout << mult<float>(11,45,10,9,8,7,6,5,4,3,2,2);
return 0;
}
输出
3.59251e+09
推荐阅读
- python - 散景问题:超出范围的浮点值不符合 JSON
- c# - 连接对象数组键
- glm - 具有 Gamma 的广义线性模型
- vb.net - No Sub Main 未找到
- angular - 无法在 lambda 生产应用程序上解码下载的字体
- c# - Prism WPF:如何最小化回调以返回 IDialogResult.Result == Buttonresult.ok
- php - FTP::connection() randomly fails
- php - 理解 PHP Fatal TypeError“必须是实例”学说 symfony 组件项目
- java - ObjectMapper.readTree does not throw IOException on Invalid input
- c# - 从 baseapi 控制器基继承路由到派生控制器