-2

我正在尝试制作具有循环的函数,该循环检查由布尔变量组成的数组的每个成员,并在找到第一个“真”值时退出。

这就是我现在所拥有的:

    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 之后返回false,如果数组没有具有true值的成员则返回,但它似乎在代码中不起作用。

这是错的吗?如果是,问题是什么?

PS.:我可以true用计数器计算 s 的数量,但这不是问题的最佳解决方案,因为我只查找 FIRSTtrue值,因此,程序不必检查所有 50 个成员。Needley 数一数,这个解决方案应该意味着多少不必要的步骤。

4

3 回答 3

1

这是@chris 建议的std::find()的简短示例用法:

bool find_element_in_array() {
    bool solids[50];
    int length;

    /* ... do many operations, and keep length as the size of values inserted in solids */

    bool* location = std::find(solids, length, true);
    // if element is found return true
    if (location != solids + length)
        return true;
    // else return false
    return false;
}
于 2013-06-09T19:50:07.603 回答
0

一旦你正确设置了实体(看起来你当前正在将每个值设置为相同的东西),你可以制作一个循环,在第一个 true 上退出,如下所示:

for (i = 0; i < 50; i++)
{
    if (solids[i] == true)
    {
        return true;
    } 
}
return false;

我也只是将声明i移到for循环体中,因为它没有在外面使用,但上面回答了你的问题。

于 2013-06-09T19:31:24.020 回答
0

return立即退出函数,所以后面不需要break循环。

如果在搜索后立即退出函数就足够了,您应该编写如下内容:

for (int i = 0; i < 50; i++) {
  if (solids[i]) return true;
}
return false;

如果您需要在同一函数中使用搜索结果,请使用附加变量:

bool found = false;
for (int = 0; i < 50; i++) {
  if (solids[i]) {
    bool = true;
    break;
  }
}

if (found) { ...
于 2013-06-09T19:32:18.987 回答