如何写这个"或"陈述更短,是不是?

Ein*_*ols -2 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;
}
Run Code Online (Sandbox Code Playgroud)

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

chr*_*ris 5

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

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

确保数组大小已知,std::begin并且std::end实际上将起作用(即,数组实际上不是指针).

对于一个完全预先C++ 11的解决方案,您可以使用std::find_if,如果您不想编写自己的谓词,可以使用now-deprecated std::bind2ndwith std::greaterfunctor来绑定0:

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

  • +1.确保为此启用了C++ 11编译选项. (3认同)