在C++中实现类似 python "map"函数的问题:调用类成员函数
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);
但编译器仍然抱怨。
在我的标题中,我把:
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
或更早地设置编译器标志。
问题是nz
是一个成员函数,因此需要在其关联的对象上调用。 最简单的方法是使用捕获 lambda:
std::transform(input.begin(), input.end(), output.begin(), [this] (double d) { return nz (d); });
另外,我建议您通过const
引用而不是按值传递input
,因为后者会复制。
现场演示
相关文章:
- 类C++中的函数问题(LNK2019和LNK1120错误)
- 返回不停止函数,递归函数问题?(编程练习,动态规划,Levenshtein 回溯)
- 变分模板递归构造函数问题
- C++函数问题中的数组分配
- C++中嵌套在另一个 LinkedList 中的 LinkedList 整数上的回调函数问题
- C++重载构造函数问题
- 二叉搜索树析构函数问题
- C++ vector<pair<int,int>> std::all_of() 函数问题(重定向到头文件)
- 迷宫构造函数问题 [线程 1:EXC_BAD_ACCESS(代码 = 1,地址 = 0x8)]
- C++函数问题中的 IF 语句
- 函数问题,未定义的引用错误
- C++ 指针无效函数问题
- C++函数问题 = 帮助我理解基本概念
- 由于基于接口的编程,遇到 C++ 虚拟模板函数问题
- C++二进制树递归析构函数问题
- 构造函数问题<无法读取内存>
- 构造函数问题
- C 时间函数问题
- 另一个类中的类的构造函数问题
- C与C++函数问题