通过在C ++中实现类似python这样的“ map”函数的问题:调用类成员函数

问题描述 投票:0回答:1

我有一个函数成员:

double XC::nz(double z){
    return pow(z/zrange_0,2)*exp(-pow(z/zrange_0,1.5));
}

我想得到等价的但具有矢量形式,所以我做到了:

vector<double> XC::nz_vec(vector<double> input){

    vector<double> output;
    output.resize(input.size());
    transform(input.begin(), input.end(), output.begin(), nz);
    return output;
}

但是自从调用nz函数以来,尤其是在transform(input.begin(), input.end(), output.begin(), nz)中,编译没有通过。

所以,我看到了另一种可能是:

    transform(input.begin(), input.end(), output.begin(), this->*nz);

但是编译器仍然抱怨。

在我的标题中,我放置了:

class XC{

...

public:    
       double nz(double);
       vector<double> nz_vec(vector<double>);

}

由于我想用同一类的另一种方法来解决这个问题:

int numPoints = 100000;
vector<double> nz_vec_min = nz_vec(linspace(zmin[0], zmin[1], numPoints));
vector<double> nz_vec_max = nz_vec(linspace(zmax[0], zmax[1], numPoints));

带有返回向量的linspace(如python中的]

???

我可以将编译器标志设置为-std=c++11或更早的版本。

任何线索都可以。

c++ vector mapreduce stdvector
1个回答
1
投票

问题是nz是成员函数,因此需要在其关联对象上调用。最简单的方法是捕获lambda:

std::transform(input.begin(), input.end(), output.begin(), [this] (double d) { return nz (d); });
© www.soinside.com 2019 - 2024. All rights reserved.