例如:
b = [T T F F T F],然后函数返回3。
我可以通过for循环程序来做到这一点。但是,函数返回“布尔向量中的真值的数量”是否比for循环程序更快?
感谢。
答案 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有一个计数,但它的实现再次定义了计数的完成方式。