2013-12-19 3 views
2

Скажем, у меня есть этот логический массив:Проверьте, не верны ли все логические значения в массиве?

bool something[4] = {false, false, false, false}; 

Теперь, есть ли простой способ проверить, если все значения в этом массиве является истина/ложь сразу?

Вместо того чтобы делать это следующим образом:

if(something[0] == false && something[1] == false..) 
dothis(); 
+3

Используйте петлю. Как в дубликате выше. –

ответ

9

Использование 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"; 
    } 
+0

@Salgar Да, они есть. 'bool' является интегральным типом -> это число. –

+0

Я понимаю, что он отредактировал свой ответ. Раньше это было странно. – Salgar

+0

Если я использую пространство имен std, мне не нужно вводить std :: before такие вещи, как cout и т. Д., Правильно? Это относится и к этому? Кроме того, если кто-то хотел бы просто объяснить, почему не так много людей используют пространство имен std, я был бы признателен за это. :) – Hummelmannen

4

Используйте цикл.

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, которая требовала бы два.

+2

Что относительно любого массива с миллионами bools и первого как' false' и нужно проверить все 'true'? 'std :: all_of' просто использует' std :: find_if_not' – P0W

+0

@ P0W: Я предполагал, что вопрос заключался в том, чтобы найти условия _both_, а не условие – Eric

+1

Вам еще не нужно проходить весь массив для любого из условий если первые два элемента верны и ложны соответственно. – Moberg

Смежные вопросы