如何将对象传递给std :: accumulate函数?

时间:2019-05-02 01:27:17

标签: c++

我正在编写如下代码。该代码的目标是在将来自不同矢量的元素合并之后,将不同的矢量组合为一个矢量。以下代码不完整,我无法找到将s函数所需的对象target_funcombine传递到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向量的元素。请提出一个代码或对上述代码进行更改,以实现我的目标。

1 个答案:

答案 0 :(得分:0)

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

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