Стандартные предикаты для 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);

где функция isPositive определяется как

 bool isPositive(double x) 
 {
     return (x>0); 
 }

Следующий код возвратился бы 2. Существует ли способ сделать вышеупомянутое, не пишущий мою собственную функцию isPositive? Существует ли встроенная функция, которую я мог использовать?

Спасибо!

12
задан JSBձոգչ 19 July 2010 в 16:20
поделиться

4 ответа

std :: count_if (v.begin (), v.end (), std :: bind1st (std :: less (), 0)) - это то, что вы хотите.

Если вы уже используете пространство имен std , более четкая версия читает

count_if(v.begin(), v.end(), bind1st(less<double>(), 0));

Все это относится к заголовку , наряду с другими стандартными предикатами.

32
ответ дан 2 December 2019 в 03:06
поделиться

Если вы компилируете с MSVC ++ 2010 или GCC 4.5+, вы можете использовать реальные лямбда-функции:

std::count_if(Array.begin(), Array.end(), [](double d) { return d > 0; });
12
ответ дан 2 December 2019 в 03:06
поделиться
cout<<std::count_if (Array.begin(),Array.end(),std::bind2nd (std::greater<double>(),0)) ;  
greater_equal<type>()  -> if >= 0
1
ответ дан 2 December 2019 в 03:06
поделиться

Я не думаю, что есть встроенная функция. Однако вы можете использовать ускорение лямбда http://www.boost.org/doc/libs/1_43_0/doc/html/lambda.html чтобы написать это:

cout << count_if(Array.begin(), Array.end(), _1 > 0);
7
ответ дан 2 December 2019 в 03:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: