我需要计算数字范围在 vector 中出现的频率
比如我想知道2,3,4在下面的 vector vec中出现了多少次。
std::vector<int> vec = {0,3,1,3,2,4,0,1,3,4,2,3,4};
结果总和[i] = 8
如果范围始终相同,没问题:
sum[i] = std::count_if(vec.begin(), vec.begin(), [k](int i) { return i >=2 && i <=4; }); //lambda function works
但是我需要 for 循环中不同范围的 sum[i],例如2、3、4,后来是 0、1、2,那是行不通的。
int a = 0;
int b = 0;
// some computation
a = 2;
b = a+2;
sum[i] = std::count_if(vec.begin(), vec.begin(), [k](int i) { return i >=a && i <=b; }); //doesn't work as a and b are not constant.
有没有办法在 for 循环中将动态范围应用于 count_if?
最佳答案
lambda 的第一部分(您有 k
)定义了该 lambda“捕获”的内容,有效地将它们带入了 lambda 的范围。所以你可以像这样定义你的 lambda:
[a,b](int i) { return i >= a && i < b; }
更多信息:这样做会将 复制 a
和 b
到 lambda 中。如果您希望 lambda 表达式引用变量,您可以添加 &
,例如 [&a,&b]
。这些可以混合。如果您不想明确列出所有内容,您可以让编译器自动检测使用的内容并将它们复制到 lambda 中,或者 [&]
在 lambda 中引用它们。
关于c++ - 如何使用 count_if 计算 vector 中数字的可变范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52141992/