gpt4 book ai didi

c++ - 缩短多变量比较

转载 作者:行者123 更新时间:2023-12-02 01:14:28 24 4
gpt4 key购买 nike

[这是一个有长度限制的项目,因此有这个问题]

我有一个函数,用于返回传递的变量数量等于零。

int countZeros(int a, int b, int c, int d)
{
int zeros = 0;
if(a == 0)
{
zeros++;
}
if(b == 0)
{
zeros++;
}
if(c == 0)
{
zeros++;
}
if(d == 0)
{
zeros++;
}
return(zeros);
}

该代码功能完美,但对于它所实现的目标来说却很长。是否可以使用 for 循环做同样的事情?

例如:对于[数据集]{zeros++;}中的每个 0

我意识到我可以在调用函数时使用 for 循环来测试每个变量,但该函数是在变量声明内部调用的:

addavg[x][y] = ((varA + varB + varC + varD + nums[x][y]) / (5 - (countZeros(varA, varB, varC, varD)))); 

最佳答案

可变参数函数怎么样?它将需要任意数量的整数。

此示例使用折叠表达式来使代码更短且更易于阅读。

template <typename ...Ts> 
int countZeros(Ts ...ts)
{
return ( !ts + ...);
}

此外,您还有这个示例用例

addavg[x][y] = ((varA + varB + varC + varD + nums[x][y]) / (5 - (countZeros(varA, varB, varC, varD))));

您可以使用与上面相同的技术来编写

template <typename ...Ts> 
int sum(Ts ...ts)
{
return (ts + ...);
}

然后你的例子就变成了

addavg[x][y] = ((sum(varA, varB, varC, varD) + nums[x][y]) / (5 - (countZeros(varA, varB, varC, varD))));

关于c++ - 缩短多变量比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60875479/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com