是否有内置函数返回" the number of true value in a boolean vector "?

Is there built-in function return " the number of true value in a boolean vector "?

本文关键字:in value boolean vector true number 内置 函数 返回 是否 the      更新时间:2023-10-16

例如:

b = [T T F F T F],则函数返回 3 。

我可以通过 for 循环程序来做到这一点。但是,有没有函数返回"布尔向量中真值的数量"来比for循环程序更快地做到这一点?

谢谢。

std::count(b.begin(), b.end(), true);

可能是个好主意。如果您想尝试,请更详细:

法典

#include <vector>     // std::vector
#include <algorithm>  // std::count
#include <iostream>   // std::cout, std::endl
int main(){
    std::vector<bool> b = { true, true, false, true, false, true };
    auto count = std::count(b.begin(), b.end(), true);
    std::cout << "Count = " << count << std::endl;
    return 0;
}

输出

计数 = 4

std::vector<bool> 节省空间的实现是...实现了定义,因此没有可移植的方法。

但是,如果你真的需要在这里快速,并且不介意每次出现编译器,cpu,OS的新补丁/版本时重写程序,那么大多数实现都有一种方法。

大多数实现可能会将其实现为某种类型的 int 数组,如果您可以访问该数组,则可以使用 CPU 的 popcount/simd 指令将其计数为潜在的 O(n/m( 而不是 O(n(,其中 m 是可以在 CPU 上弹出的最大字长。

邪恶的头脑会假设O(n/m(是O(n(,但速度可能很大。

编辑:我忘了还有另一种可能性,即std::bitset,如果你真的不需要布尔向量。 std::bitset有一个计数,但它的实现再次定义了计数是如何完成的。