c++ - 如何使用 count_if 计算 vector 中数字的可变范围

标签 c++

我需要计算数字范围在 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; }

更多信息:这样做会将 复制 ab 到 lambda 中。如果您希望 lambda 表达式引用变量,您可以添加 &,例如 [&a,&b]。这些可以混合。如果您不想明确列出所有内容,您可以让编译器自动检测使用的内容并将它们复制到 lambda 中,或者 [&]在 lambda 中引用它们。

关于c++ - 如何使用 count_if 计算 vector 中数字的可变范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52141992/

相关文章:

c++ - 运算符重载中运算符的组合

python - Cython 抛出语法错误

c++ - ffmpeg sws_scale 上的段错误

c++ - 为什么字符串作为指针或字符串作为原始数组总是在重载函数中作为指针调用?

c++ - 私有(private)变量的读取时间晚于成员初始化列表?

c++ - 使用OpenCV从2D图像点计算3D世界点

c++ - 如何在代码中使用 Unreal 4 ProceduralMeshComponent 类?

c++ - 使用 std::enable_if 保护复制构造函数

c++ - 错误 : typedef redefinition with different types

c++ - 体系结构 x86_64 : "_alloca" 的 undefined symbol