检查数组中的所有布尔值是不是为真?
Posted
技术标签:
【中文标题】检查数组中的所有布尔值是不是为真?【英文标题】:Check if all boolean values in an array is true?检查数组中的所有布尔值是否为真? 【发布时间】:2013-12-19 17:04:43 【问题描述】:假设我有这个布尔数组:
bool something[4] = false, false, false, false;
现在,有没有什么简单的方法可以同时检查这个数组中的所有值是否为真/假?
不要这样做:
if(something[0] == false && something[1] == false..)
dothis();
【问题讨论】:
使用循环。就像上面的副本一样。 这个问题不应该被关闭,它比替代方案更具体。 【参考方案1】:使用std::all_of
#include<algorithm>
...
if (std::all_of(
std::begin(something),
std::end(something),
[](bool i)
return i; // or return !i ;
))
std::cout << "All numbers are true\n";
【讨论】:
@Salgar 是的,他们是。bool
是一个整数类型 -> 它是一个数字。
我明白,他编辑了他的答案。以前很奇怪。
***.com/questions/1452721/…
很高兴指出 all_of 仅在 C++11 上定义...
只想添加一个带指针的方法:std::all_of(something, &something[4], [](bool b) return b;);
【参考方案2】:
使用 for 循环。
allTrue = true;
allFalse = true;
for(int i=0;i<something.size();i++)
if(something[i]) //a value is true
allFalse = false; //not all values in array are false
else //a value is false
allTrue = false; //not all values in array are true
我的语法可能有点不对劲(有一段时间没用过 C++),但这是一般的伪代码。
【讨论】:
【参考方案3】:你可以通过求和来做到这一点:
#include <numeric>
int sum = std::accumulate(bool_array, bool_array + 4, 0);
if(sum == 4) /* all true */;
if(sum == 0) /* all false */;
这具有一次性找到两个条件的优势,不像all_of
的解决方案需要两个。
【讨论】:
如果数组有数百万个布尔值,第一个为false
并且需要检查所有 true
呢? std::all_of
只使用std::find_if_not
@P0W:我假设问题是找到两个条件,而不是任何一个条件
如果前两个元素分别为真和假,您仍然不需要遍历整个数组的任何一个条件..【参考方案4】:
您可以搜索第一个错误标志:
bool something[n];
...
bool allTrue = (std::end(something) == std::find(std::begin(something),
std::end(something),
false) );
【讨论】:
这对七年前的公认答案有何影响? @DevSolar 这是一种不同的方法。与 std::all_of 类似,但不同。另外它不需要 lambda。以上是关于检查数组中的所有布尔值是不是为真?的主要内容,如果未能解决你的问题,请参考以下文章
如果数组中的所有值都为真(字符串)并且其中一个值为假(字符串),则如何返回布尔值 true 停止使用 Javascript 进行检查