【发布时间】:2013-06-05 11:37:03
【问题描述】:
我正在尝试制作具有循环的函数,该循环检查由布尔变量组成的数组的每个成员,并在找到第一个“真”值时退出。
这就是我现在所拥有的:
bool solids[50];
int a,i;
//"equality" is a function that checks the equality between "a" and a defined value
solids[0] = equality(a,&value_1);
solids[1] = equality(a,&value_1);
solids[2] = equality(a,&value_1);
solids[3] = equality(a,&value_1);
for (i = 0; solids[i] != true; i++)
{
[...]
}
但我不知道,我应该在循环中放什么?
我的尝试是
for (i = 0; i <= 50; i++)
{
if (solids[i] == true)
{
return true;
break;
} else {
return false;
}
}
,如果数组没有具有true 值的成员,则应在第一次找到true 后返回true 并返回false,但它似乎在代码中不起作用。
错了吗?如果有,有什么问题?
PS.:我可以用计数器计算 trues 的数量,但这不是解决问题的最佳方法,因为我只查找第一个 true 值,因此,程序不必检查所有 50 个成员。需要数数,这个解决方案意味着多少不必要的步骤。
【问题讨论】:
-
只需使用
std::find。 -
您不需要
else部分。想一想 - 它为第一个非真值返回false,因此它停止搜索。 -
breakafterreturn是没有意义的,因为编译器永远不会到达它。良好的算法实践建议不要在传统的for(;;)循环中使用循环控制语句(如break或continue),而只能在while 循环中使用。for(;;)意味着从起始值开始并在达到结束条件时结束,以帮助保持代码可读性。仅供参考,无论如何......当然,不要重新发明轮子,使用std::find。 -
在第一个例子中,如果 none 个条目是
true怎么办?然后你将继续循环,也许永远。在第二个示例中,您只循环一次到多次(使用i < 50代替)。 -
@zmo 你提到的做法听起来很傻。如果你把循环放在一个足够短的函数中,很明显它会过早退出。
标签: c++ arrays function loops optimization