c++ - 数组中所有元素之间的逻辑运算

标签 c++ arrays operators bitwise-operators

我想以最有效的方式使用 bool(boolean) 运算符比较数组中的所有项目。目前,我有这样的事情:

bool myFunction(int i) 
{

    bool *myArray = {true, true, false, false, true};
    //suppose we know that i = 5 and that i is the length of the array...
    return myArray[0] && myArray[1] && myArray[2] && myArray[3] && myArray[4];
}

由于数组的大小不是固定的,因此'i'的值可以更改,而我的return语句将不再起作用,因此我必须实现这样的内容
bool myFunction(int i) 
{
    bool *myArray = //some other array of bools
    //should work with any value of i
    bool result = myArray[0];
    for (int a = 1; a < i; ++a)
    {
        result &= myArray[i];
    }
    return result;
}

我想知道是否有更好的方法,而不是进行for循环并遍历每个元素,然后将列表中下一项的值与前两项的存储结果进行比较。就像一些按位运算符可以简化操作之类的,任何东西都可以消除循环。

最佳答案

您可能需要知道&=不是逻辑运算符。它是“按位与”运算符。只要您仅在 bool(boolean) 值上使用它,我想它就可以正常工作。但是C不会阻止1或0以外的其他值滑入数组,因此您可能不应该做这个假设。从语义上来说,如果您正在执行逻辑操作,或者您想使用&&而不是&

也就是说,您当然可以使用短路来完善您正在做的事情。一旦找到单个0(假),此后的任何事情都不会使聚合返回1(真),因此您最好停止。

for (int a = 1; result && a < i; ++a)
{
    result &= myArray[i];
}

除此之外,您没有什么可以改善的地方。不知道为什么不喜欢循环,但是如果您想组合未知数量的值,则必须进行迭代。您可能会找到(或编写)一些实用程序函数来执行此操作,但是无论如何它将在内部使用循环。 (除非它试图利用 vector 处理器本能地执行您想要的操作,也许...但是那将是毫无意义的,并且,如果您确实没有值的数量限制,那么仍然会涉及到循环。)

关于c++ - 数组中所有元素之间的逻辑运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41962109/

相关文章:

php - 在PHP中将数组中的连续日期分组在一起

arrays - 如何在 Swift 中访问括号中的嵌套 JSON?

python - Numpy:用连续整数填充二维 numpy 数组

c# - 泛型和显式/隐式运算符

c++ - 找到用户输入的每个 4 位数字并使用递归对其进行计数

c++ - 解决 Visual Studio 2010 AlwaysCreate 重建问题

c++ - Linux 上 _DEBUG 的替代方案

c++ - 基类的未定义模板参数

c# - AND 运算不能应用于可为空的 bool 值之间

perl - 使用双重否定(!!)