我正在尝试创建数据向量std::vector<int> data
的直方图,其元素是从0到255的整数。我在使用std::count_if
的示例代码中看到如下:
int bins = 5; //number of intervals
std::vector<int> histogram(bins);
double interval = 255.0/bins; // interval length
for(int i=0; i< bins; i++){
histogram.emplace_back(std::count_if(data.begin(),data.end(),
[i, interval](int j){return (j < ((double) i + 1) * interval && j >= (double) i * interval);}));
}
我对std::count_if
函数的最后一个参数感到困惑。它应该是UnaryPredicate函数。我对代码试图做什么有一个大概的了解,但是我不理解上面示例中定义UnaryPredicate函数的方式。这是定义功能的捷径吗?使用这种定义是常见的还是仅限制了类似的问题?
任何类似的问题/阅读材料的解释或链接,将不胜感激。
答案 0 :(得分:0)
This其他堆栈溢出问题具有您要寻找的答案。
TL; DR:[]()
语法定义了一个lambda function,用于实现“ UnaryPredicate”的目的,而std::count_if
documentation只需实现{{1 }}的第一个参数的值类型,其返回值可转换为operator()
。