假设我有这个布尔数组:
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)
您可以搜索第一个错误标志:
bool something[n];
...
bool allTrue = (std::end(something) == std::find(std::begin(something),
std::end(something),
false) );
Run Code Online (Sandbox Code Playgroud)
使用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++),但这是一般的伪代码.
你可以通过总结来做到这一点:
#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需要两个的解决方案不同。
| 归档时间: |
|
| 查看次数: |
13681 次 |
| 最近记录: |