检查数组中的所有布尔值是否为真?

Hum*_*nen 4 c++ arrays

假设我有这个布尔数组:

bool something[4] = {false, false, false, false};
Run Code Online (Sandbox Code Playgroud)

现在,有没有简单的方法来检查此数组中的所有值是否同时为true/false?

而不是像这样做:

if(something[0] == false && something[1] == false..)
dothis();
Run Code Online (Sandbox Code Playgroud)

P0W*_*P0W 13

使用 std::all_of

if (std::all_of(std::begin(something), 
    std::end(something), 
           [](bool i)
            { 
              return i; // or return !i ;
            })) {
        std::cout << "All numbers are true\n";
    }
Run Code Online (Sandbox Code Playgroud)

  • http://stackoverflow.com/questions/1452721/why-is-using-namespace-std-considered-bad-practice (3认同)
  • 很高兴地说all_of只是从C++ 11开始定义... (2认同)

Den*_*son 6

您可以搜索第一个错误标志:

bool something[n];
...

bool allTrue = (std::end(something) == std::find(std::begin(something),
                                                 std::end(something),
                                                 false) );
Run Code Online (Sandbox Code Playgroud)

  • @DevSolar,这是一种不同的方法。与 std::all_of 类似,但仍然不同..而且它不需要 lambda。 (3认同)

Emb*_*wag 5

使用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
}
Run Code Online (Sandbox Code Playgroud)

我的语法可能有点过时(暂时没有使用过C++),但这是一般的伪代码.


Eri*_*ric 5

你可以通过总结来做到这一点:

#include <numeric> 

int sum = std::accumulate(bool_array, bool_array + 4, 0);
if(sum == 4) /* all true */;
if(sum == 0) /* all false */;
Run Code Online (Sandbox Code Playgroud)

这具有在一次通过中找到两个条件的优点,与all_of需要两个的解决方案不同。

  • 如果前两个元素分别为真和假,您仍然不需要遍历整个数组的任何一个条件。 (3认同)
  • 任何具有数百万布尔值且第一个为“false”且需要检查所有“true”的数组呢?`std::all_of` 只使用 `std::find_if_not` (2认同)