如何将对象传递到std ::累积函数
How can I pass an object to std::accumulate function?
我正在编写下面给出的代码。代码的目标是在加入来自不同向量的元素后将不同的向量组合到单个向量中。以下代码不完整,我找不到将对象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
矢量元素的初始向量。请建议对上述代码的代码或更改,该代码可用于实现我的目标。
有很多未定义的类型,这很难运行,但是您想做的就是使用函数而不是简单的函数。函子可以将值存储为您传递的成员。它应该看起来像:
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);
}
相关文章:
- 使用std::函数映射对象方法
- 可组合的lambda/std::函数与std::可选
- 当使用透明的std函数对象时,我们还需要写空的尖括号吗
- std::函数常量正确性未遵循
- 具有变量Number of Arguments的std::函数的矢量
- 从类型std::函数传递变量失败,尽管调用方期望的类型完全相同
- 如何调用存储在指向"std::函数"的指针中的 lambda?
- C++ STD 函数运算符:有没有一种方法可以通过函数将一个向量映射到另一个向量上?
- 从具有按值捕获的 lambda 移动构造 std::函数时,移动构造函数调用两次
- 如何将类 1 的 std::函数绑定到类 2 的函数?
- 如何制作可以接受任何类型的参数的 std::函数和 lambda
- 如何将 STL 队列推送函数绑定到 std::函数?
- std::函数不起作用,但普通的旧函数指针可以 - 为什么?
- 获取 std::函数以推断按引用传递/按值传递
- std::bind 和 std::函数术语不值为接受 0 个参数?
- 从其存储的回调中删除 std::函数是否安全
- 创建 std::函数,它返回具有函数成员值的变量.分段错误
- 创建一个带有 lambda 的 std::函数,而不知道函数的参数
- std::函数的解释
- 在调用过程中删除 std::函数