内置函数是否返回“布尔向量中的真值数”?

时间:2018-01-03 08:54:33

标签: c++

例如:

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

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

感谢。

2 个答案:

答案 0 :(得分:3)

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

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

代码

int main(){

    std::vector<bool> b = { true, true, false, true, false, true };

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

    std::cout << "Count = " << count << std::endl;

    return 0;
}

输出

  

计数= 4

答案 1 :(得分:1)

UIBarButtonItems的节省空间的实现是...... 实现定义,因此没有便携式方式。

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

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

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

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