免责声明:
由于您显然没有发布真正的代码,并且您的示例看起来像一些不相关的代码行,因此我的答案可能不是您想要的 - SSCCE会很好。
如果我理解正确,您想将MyStruct
s 的向量转换为所有结构成员值的总和。为此,您需要二进制加法 ( thrust::add
) 和一元运算,采用 aMyStruct
并返回其成员值的加法:
struct MyStruct {
float value1;
float value2;
};
std::vector<MyStruct> myvec;
/* fill myvec */
//C++11 with lambdas:
auto result = thrust::transform_reduce(begin(myvec), end(myvec),
[](MyStruct const& ms) { //unary op for transform
return ms.value1 + ms.value2;
},
0, thrust::add);
//C++03 with a functor:
struct MyStructReducer {
float operator()(MyStruct const& ms) {
return ms.value1 + ms.value2;
}
};
float result = thrust::transform_reduce(myvec.begin, myvec.end(),
MyStructReducer(), 0, thrust::add);
您也可以使用免费函数而不是 Reducer 类。
//C++03 with a function:
float reduceMyStruct(MyStruct const& ms) {
return ms.value1 + ms.value2;
}
/* ... */
float result = thrust::transform_reduce(myvec.begin, myvec.end(),
reduceMyStruct, 0, thrust::add);
高温高压