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

时间:2013-10-01 17:24:00

标签: 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。

3 个答案:

答案 0 :(得分:5)

使用std::any_of(C ++ 11)清楚地显示您的意图。我假设你有一组int s。但是,在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::bind2nd和{ {1}}绑定0的算符:

std::greater

答案 1 :(得分:4)

只需使用for循环:

fail = 0;
int i;
for(i = 0; i < 10; i++) {
    if(masivs[0][i] > 0) {
        fail = 1;
        break;
    }
}

答案 2 :(得分:2)

使用for循环遍历要检查的行中的列。