是否有内置函数返回" the number of true value in a boolean vector "?
Is there built-in function return " the number of true value in a boolean vector "?
例如:
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有一个计数,但它的实现再次定义了计数是如何完成的。
相关文章:
- netcat command in c++
- Difference in displaying cv2 Mat
- 瓦尔格林德:数学函数"Conditional jump or move depends on uninitialised value(s)"
- C++ MFC Libraries in Travis CI
- 如何在OpenSSL中从configuration.h.in获取configuration.h
- 创建具有 new in 函数和"this is nullptr"异常的对象
- 为什么static_assert错误:即使我传递常量"expression must have a constant value"?
- IN, OUT, INOUT Parameters
- 应用程序崩溃并显示"symbol _ZdlPvm, version Qt_5 not defined in file libQt5Core.so.5 with link time reference"
- 有人安装"IITB Simplecpp in mac"吗?
- 从 C 样式字符串中删除子字符串 "in place" 在C++代码中
- 如何修复此错误"the value of 'x1' is not usable in a constant expression"?static_assert
- c++:在函数返回过程中,"catching reference in value"与"catching value in value"有什么区别?
- "How to pass String value in between URL in C/C++?"
- 是否有内置函数返回" the number of true value in a boolean vector "?
- 在 Json::Value in JsonCpp 中赋值 [null]
- long long value in Visual Studio
- 如何修复理性狂想曲错误:"Current value is " VC11 ", but no Visual Studio installation was not found in the direc
- 我正在开发Arduino Uno。错误:开关外壳的"'RX' not declared in the scope."和"duplicate case value"
- 循环函数给出"return’ with a value, in function returning void"误差