C++ 如何在一元运算中访问迭代器?

C++ 如何在一元运算中访问迭代器?,c++,stl,functor,thrust,C++,Stl,Functor,Thrust,我正在尝试对结构的向量执行变换约简。结构包含两个数字。我想让一元函数处理这两个数字,并为向量中的每个结构返回一个值,然后用这些值的总和进行约简。如何编写函子以访问结构中的值 例如,函数中mystruct.value1的正确语法是什么 struct unary_op { float operator()() { return mystruct.value1 + mystruct.value2; //function is a lot more complex

我正在尝试对结构的向量执行变换约简。结构包含两个数字。我想让一元函数处理这两个数字,并为向量中的每个结构返回一个值,然后用这些值的总和进行约简。如何编写函子以访问结构中的值

例如,函数中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)
免责声明: 由于您显然没有发布真正的代码,并且您的示例看起来像一些不相关的代码行,所以我的答案可能不是您想要的-a会很好

如果我理解正确,您希望将
MyStruct
s的向量转换为所有structs成员值的总和。为此,您需要二进制加法(
stress::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);

HTH

操作符()
定义为
\uuuuuu主机\uuuuuuu设备\uuuuuuuuuuuu浮点操作符()
可以,但函数中mystruct.value1的正确语法是什么?谢谢,这也很重要。一元运算有一个参数。您的
操作符()
不接受任何操作。这回答了我的问题,谢谢。我不知道你必须像那样给函数传递一个参数。我使用struct是因为它允许我事先传递额外的参数。
//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);