gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 04:57:10 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com