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