如果数组全为0(或为假),我可以检入C(++)吗?

kni*_*ttl 5 c c++ arrays compare zero

我是否可以检查C(++)是否数组全为0(或为假)而不对每个值进行迭代/循环并且不分配相同大小的新数组(使用memcmp)?

我正在滥用一系列bool来在运行时使用任意大的bitset并对它进行一些翻转

Oli*_*rth 7

您可以使用以下条件:

(myvector.end() == std::find(myvector.begin(), myvector.end(), true))
Run Code Online (Sandbox Code Playgroud)

显然,在内部,这会遍历所有值。

另一种方法(确实应该避免循环)是覆盖所有写访问函数,并跟踪是否true曾经写入您的向量。

更新

下面 Lie Ryan 的评论描述了一种基于相同原理的更强大的方法。

  • 但是要记住的一件事是,如果您经常修改数组并且很少进行“全为 0”检查,并且如果数组不是太大,那么您在修改计数器上浪费的时间会比您浪费的时间多如果你要检查数组。 (4认同)
  • 一种更复杂的方法是跟踪数组中有多少 `true`。如果将值从 true 更改为 false,则递减此计数器,如果将值从 false 更改为 true,则递增计数器。否则,如果您从真变为真或从假变为假,则什么都不做。如果计数器为零,您可以判断数组是否全部为假。 (3认同)
  • 覆盖 std::vector<bool> 不是一个好主意。派对,因为标准容器实现不一定被设计为被覆盖。而且,在 c++0x 中, std::vector<bool> 将不再是位集。 (2认同)