c++ - 如何写短这个 "or"语句是不是?

标签 c++ c arrays bitwise-operators conditional-statements

fail = 0;   

if (masivs[0][0]>0 | masivs[0][1]>0 | masivs[0][2]>0| masivs[0][3]>0 |masivs[0][4]>0| masivs[0][5]>0|masivs[0][6]>0| masivs[0][7]>0|masivs[0][8]>0|masivs[0][9]>0)
{
    fail = 1;
}   
else {
    fail = 0;
}

我需要检查第 0 行中是否有一些正元素,如果是,则需要将失败更改为 1。

最佳答案

使用std::any_of (C++11) 清楚地表明您的意图。我假设您有一个 int 数组。但是,在 C++14 中,您可以将下面的 int 替换为 auto,并且它适用于任何类型。

fail = std::any_of(
    std::begin(masivs[0]), std::end(masivs[0]), 
    [](int i) {return i > 0;}
);

确保数组大小已知,以便 std::beginstd::end 实际工作(即数组实际上不是指针) .

对于完全预于 C++11 的解决方案,您可以使用 std::find_if,如果您不想编写自己的谓词,则可以使用现已弃用的 std::bind2ndstd::greater 仿函数绑定(bind) 0:

int *end = masivs[0] + 9;
fail = (std::find_if(masivs[0], end, std::bind2nd(std::greater<int>(), 0)) != end);

关于c++ - 如何写短这个 "or"语句是不是?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19122280/

相关文章:

c++ - 如何将二维数组的引用传递给函数?

c++ - while 语句中的条件顺序

mysql - 为什么在 MAC OSX 上编译简单的 mysql c 应用程序时不断收到 undefined symbol ?

c - LCD 右移和左移错误

c - 如何在此程序中合并输入数组

python - 将数组与文件进行比较,并根据数组元素形成组

javascript - 如何 return 或 console.log 我的函数以返回我选择的数组?

c++ - Windows 上的 PEM_read_bio_RSAPrivateKey() 差异

C++将新数组传递给函数的指针

c++ - protobuf : if (from. _has_bits_[0/32] & (0xffu << (0 % 32))) {