count_if使用我自己的类实现第三个参数

时间:2017-10-29 10:50:07

标签: c++ c++11

我在编写函数时遇到问题,无法将参数正确地传递给算法库的count_if。

这是我的代码。

int range = count_if(empVect.begin(), empVect.end(), empVect.InRange(200,399));

inRange函数的实现是:

bool Employee::inRange(double min, double max)
{
if (nIncome > min && nIncome < max)
return true;
return false;
}

编译器错误:类“std :: vector&gt;”没有会员“InRange”

我有一个包含2个字符串和3个双成员变量的Employee类。 我已经在我的主要硬编码矢量创建,并需要显示在一定收入范围内的员工数量。根据分配要求,仅需要使用count_if或lambda函数。 感谢。

1 个答案:

答案 0 :(得分:2)

empVectstd::vector<Employee>,它没有接受任何内容的InRange成员函数。该函数是Employee类的成员。您需要定义一个仿函数,该仿函数将使用您传递的参数在向量的每个实例上调用该成员。一个简单的lambda会起到作用:

int range = count_if(empVect.begin(), empVect.end(), [](Employee const& e){
               return e.InRange(200,399);
            });

您还需要将inRange修复为const成员函数,因为e是对const Employee的引用。渴望编写const正确的代码。如果成员没有修改任何成员数据,请默认将其标记为const。