STL count_if的标准谓词

时间:2010-07-19 16:17:17

标签: stl vector c++

我正在使用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?有内置的吗? 功能我可以使用?

谢谢!

4 个答案:

答案 0 :(得分:32)

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>标题,以及其他标准谓词。

答案 1 :(得分:12)

如果您正在使用MSVC ++ 2010或GCC 4.5+进行编译,则可以使用真正的 lambda函数:

std::count_if(Array.begin(), Array.end(), [](double d) { return d > 0; });

答案 2 :(得分:7)

我认为没有内置功能。 但是,您可以使用boost lambda http://www.boost.org/doc/libs/1_43_0/doc/html/lambda.html 写下来:

cout << count_if(Array.begin(), Array.end(), _1 > 0);

答案 3 :(得分:1)

cout<<std::count_if (Array.begin(),Array.end(),std::bind2nd (std::greater<double>(),0)) ;  
greater_equal<type>()  -> if >= 0