如何将对象传递到std ::累积函数

How can I pass an object to std::accumulate function?

本文关键字:std 函数 对象      更新时间:2023-10-16

我正在编写下面给出的代码。代码的目标是在加入来自不同向量的元素后将不同的向量组合到单个向量中。以下代码不完整,我找不到将对象starget_fun传递到combine的方法,这是join函数中所需的。对象scombine中无效,因为它是在target_fun中创建的。

using Elems = vector<AbsC>;
Elems combine(const Elems & acc, const auto & it) {
  Special p = *it;
  Elems later_element;
  later_Element = this->l.get(p);
  Elems result;
  for (auto a : acc) {
    for (auto n : later_element) {
        result.push_back(a.join(n,s));
    }
  }
  return result;
}
target_fun(Wto& v) {
  Special s = v.node();
  Elems initial_element;
  initial_element = this->m.get(s);
  Elems E = std::accumulate(pre_begin(s), pre_end(s), *initial_element, combine);
}

请注意,pre_begin(s)给出了一个可以用来获取第一个向量的迭代器,并且pre_end(s)给出了迭代器以获取最后一个向量,而initial_element是我想加入later_element矢量元素的初始向量。请建议对上述代码的代码或更改,该代码可用于实现我的目标。

有很多未定义的类型,这很难运行,但是您想做的就是使用函数而不是简单的函数。函子可以将值存储为您传递的成员。它应该看起来像:

struct ElemsCombine {
  Special s;
  Elems operator()(const Elems & acc, const auto & it) const {
    Special p = *it;
    Elems later_element;
    later_Element = this->l.get(p);
    Elems result;
    for (auto a : acc) {
      for (auto n : later_element) {
          result.push_back(a.join(n,s));
      }
    }
    return result;
  }
};
target_fun(Wto& v) {
  Special s = v.node();
  Elems initial_element;
  initial_element = this->m.get(s);
  auto comb = ElemsCombine ();
  comb.s = s;
  Elems E = std::accumulate(pre_begin(s), pre_end(s), *initial_element, comb);
}