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