transform_reduce & 摆脱 for 循环



所以我现在正在浏览我的一些代码,并试图摆脱一些我不喜欢的循环,并试图获得更多标准算法的经验。 所以我现在的循环可以通过以下代码片段最好地解释:

// Defined struct
struct A {
/* stuff */
size_t computed_value() const { /* ... */ return value; }
};
// In other location in code
std::vector<A> vecA;
// ... insert tons of A's into vecA
size_t summed_value = 0;
for(const auto& a : vecA) {
summed_value += a.computed_value();
}

这就是我想用标准算法替换的循环,我认为我已经找到了完美的选择。std::transform_reducenumeric标题中,但似乎我的 clang 或 g++ 版本都没有包含此功能..? 我想到的其他一些事情是std::accumulate但它需要将 A 隐式转换为 int(据我所知(和std::transform但我找不到任何使用 int 或 size_t 作为输出值的方法。

注意:截至目前,我最多只愿意使用C++17。

有人对我应该研究的功能有任何建议吗?谢谢!

std::accumulate函数应该可以正常工作:

size_t summed_value = std::accumulate(begin(vecA), end(vecA), 0, [](size_t acc, A const& a)
{
return acc + a.computed_value();
});

最新更新