2013-12-19 125 views
2

比方說,我有這個布爾數組:檢查數組中的所有布爾值是否爲真?

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

現在,有沒有簡單的方法來檢查,如果此數組中所有的值是真/假一次?

而不是做它像這樣的:for循環

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'是一個整數類型 - >它是一個數字。 – 2013-12-19 17:09:06

+0

我明白,他編輯了他的答案。之前很奇怪。 – Salgar

+0

如果我使用std命名空間,我不必在類似cout之類的東西前輸入std :: right,對嗎?這是否也適用於此?另外,如果有人想簡單地解釋爲什麼不那麼多人使用命名空間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

仍然不應該需要通過整個數組來處理任一條件如果前兩個元素分別爲true和false。 – Moberg

相關問題