通过在 C++ 中实现类似于 "map" 函数的 python 发出问题:调用 class 成员函数
Issue by implementing a python like "map" function in C++ : call a class member function
我有一个函数成员:
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);
但编译器仍然报错。
在我的 header 中,我输入了 :
class XC{
...
public:
double nz(double);
vector<double> nz_vec(vector<double>);
}
如何绕过这个问题,因为我想用另一种相同的方法来做 class :
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 returns 向量(如 Python)?
我可以设置编译器标志 -std=c++11
或更早。
问题是 nz
是一个成员函数,因此需要在其关联对象上调用。最简单的方法是使用捕获 lambda:
std::transform(input.begin(), input.end(), output.begin(), [this] (double d) { return nz (d); });
此外,我建议您通过 const
引用传递 input
,而不是按值传递,因为后者会复制。
我有一个函数成员:
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);
但编译器仍然报错。
在我的 header 中,我输入了 :
class XC{
...
public:
double nz(double);
vector<double> nz_vec(vector<double>);
}
如何绕过这个问题,因为我想用另一种相同的方法来做 class :
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 returns 向量(如 Python)?
我可以设置编译器标志 -std=c++11
或更早。
问题是 nz
是一个成员函数,因此需要在其关联对象上调用。最简单的方法是使用捕获 lambda:
std::transform(input.begin(), input.end(), output.begin(), [this] (double d) { return nz (d); });
此外,我建议您通过 const
引用传递 input
,而不是按值传递,因为后者会复制。