Определение функции UnaryPredicate - PullRequest
0 голосов
/ 18 декабря 2018

Я пытаюсь создать гистограмму вектора данных 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 в приведенном выше примере.Это какой-то короткий способ определить функцию?Это обычное использование такого рода определения или просто ограниченные похожие проблемы?

Будем благодарны за любые пояснения или ссылки на подобные проблемы / материалы для чтения.

1 Ответ

0 голосов
/ 18 декабря 2018

Этот другой вопрос о переполнении стека содержит ответ, который вы ищете.

TL; DR: синтаксис []() определяет лямбда-функцию , которая обслуживаетцель "UnaryPredicate", которая, согласно документации std::count_if , просто должна быть чем-то, что реализует operator() в типе значения первого аргумента и имеет возвращаемое значение, конвертируемое в bool.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...