当尝试使用条件copy_if
算法仅将低于向量中值的平均值的值复制到另一个向量时,我的函数对象遇到了障碍:
struct Lower_than_mean
{
private:
double mean;
vector<double>d1;
public:
Lower_than_mean(vector<double>a)
:d1{a}
{
double sum = accumulate(d1.begin(), d1.end(), 0.0);
mean = sum / (d1.size());
}
bool operator()(double& x)
{
return x < mean;
}
};
int main()
{
vector<double>vd{ 3.4,5.6, 7, 3,4,5.6,9,2 };
vector<double>vd2(vd.size());
copy_if(vd.begin(), vd.end(), vd2, Lower_than_mean(vd));
}
解决这个问题的正确方法是什么?
您在对 的调用中使用了vd
而不是。vd.begin()
std::copy_if
但是,说真的,你甚至都懒得阅读你的编译器输出......
另外,就像@zch 建议的那样-您的方法没有意义:不要一次又一次地重新计算平均值。相反,计算一次,然后你的函数就变成了简单的[mean](double x) { return x < mean; }
lambda。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句