Стандартные предикаты для STL count_if
Я использую функцию STL count_if для подсчета всех положительных значений
в векторе двойников. Например, мой код выглядит примерно так:
vector<double> Array(1,1.0)
Array.push_back(-1.0);
Array.push_back(1.0);
cout << count_if(Array.begin(), Array.end(), isPositive);
где функцияPositive определяется как
bool isPositive(double x)
{
return (x>0);
}
Следующий код вернет 2. Есть ли способ сделать выше
без написания моей собственной функции isPositive? Есть ли встроенный
функцию, которую я мог бы использовать?
Спасибо!
Ответы
Ответ 1
std::count_if(v.begin(), v.end(), std::bind1st(std::less<double>(), 0))
- это то, что вы хотите.
Если вы уже using namespace std
, более ясная версия читает
count_if(v.begin(), v.end(), bind1st(less<double>(), 0));
Все это относится к заголовку <functional>
, наряду с другими стандартными предикатами.
Ответ 2
Если вы компилируете с MSVС++ 2010 или GCC 4.5+, вы можете использовать настоящие лямбда-функции:
std::count_if(Array.begin(), Array.end(), [](double d) { return d > 0; });
Ответ 3
Я не думаю, что есть встроенная функция.
Однако вы можете использовать boost lambda http://www.boost.org/doc/libs/1_43_0/doc/html/lambda.html
написать:
cout << count_if(Array.begin(), Array.end(), _1 > 0);
Ответ 4
cout<<std::count_if (Array.begin(),Array.end(),std::bind2nd (std::greater<double>(),0)) ;
greater_equal<type>() -> if >= 0