Lig*_*uzz 3 c++ function c++11
假设我有一个对象
class Obj {
public:
int a;
int b;
int c;
}
Run Code Online (Sandbox Code Playgroud)
和一系列对象
Obj o[N];
Run Code Online (Sandbox Code Playgroud)
我想将每个Obj.a复制到一个int数组中,我知道其他语言允许我在C++中创建一个看起来像这样的函数
int & fun(Obj os[], T key, int N){
int a[N];
for (int i=0; i<N; i++) {
a[i] = os[i].key;
}
return a;
}
Run Code Online (Sandbox Code Playgroud)
在C++中有没有可重复使用的方法?作为参考,Obj的代码不能被修改.
这就是该std::transform
功能的用途.您需要提供的只是一个从中获取所需元素的函数Obj
.此示例显示如何执行此操作std::mem_fn
:
#include <algorithm>
#include <functional>
#include <iterator>
#include <iostream>
struct Obj { int a, b, c; };
int main() {
Obj o[3] = {{1, 2, 3}, {11, 22, 33},{111, 222, 333}};
int a[3];
std::transform(std::begin(o), std::end(o),
std::begin(a),
std::mem_fn(&Obj::a));
for (auto e : a)
std::cout << e << ' ';
std::cout << std::endl;
};
Run Code Online (Sandbox Code Playgroud)
输出:
1 11 111
这可以全部包含在辅助函数中,以允许调用者设置要提取的属性.但请注意,如果你真的想要一个函数来返回一个数组,你需要使用一个可复制的类型,如std::array
或std::vector
.在C++中,普通数组不可复制,因此无法通过函数的值返回.