gpt4 book ai didi

c++ - thrust::transform_reduce 如何访问一元运算中的迭代器?

转载 作者:行者123 更新时间:2023-11-30 04:21:02 26 4
gpt4 key购买 nike

我正在尝试对结构 vector 执行转换归约。该结构包含两个数字。我希望一元函数对这两个数字执行某些操作,并为我的 vector 中的每个结构返回一个值,并减少这些值的总和。如何编写仿函数来访问结构中的值?

例如,函数中 mystruct.value1 的正确语法是什么?:

struct unary_op
{
float operator()()
{
return mystruct.value1 + mystruct.value2; //function is a lot more complex
}
}

所以我可以这样做:

unary_op uop1;
thrust::transform_reduce(myvec.begin(), myvec.end(), uop1, 0, thrust::add)

最佳答案

免责声明:由于您显然没有发布真实代码,并且您的示例看起来像是一些不相关的代码行,所以我的答案可能不是您要找的 - SSCCE本来不错。

如果我没理解错的话,你想将 MyStruct 的 vector transform_reduce 为所有结构成员值的总和。为此,您需要二进制加法 (thrust::add) 和一个采用 MyStruct 并返回其成员值加法的一元运算:

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);

HTH

关于c++ - thrust::transform_reduce 如何访问一元运算中的迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14869831/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com