gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 10:08:43 32 4
gpt4 key购买 nike

我想以最有效的方式使用 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/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com