dl
dl_range_accumulate.h
浏览该文件的文档.
1
12#pragma once
13
14#include <type_traits>
15
18{
19//因为减 和 除是逆操作,其值互反,所以这儿不实现
20//标准库的accumulate需要传入初值,这里简化了
21
23template<typename C>
24constexpr auto Add(const C& container)
25{
26 using V = std::decay_t<decltype(container)>;
27 using T = typename V::value_type;
28 if (container.empty())
29 return T{};
30 T ret = *container.begin();
31 for (auto iter = container.begin() + 1; iter != container.end(); ++iter)
32 ret += *iter;
33 return ret;
34}
35
37template<typename C>
38constexpr auto Mul(const C& container)
39{
40 using V = std::decay_t<decltype(container)>;
41 using T = typename V::value_type;
42 if (container.empty())
43 return T{};
44 T ret = *container.begin();
45 for (auto iter = container.begin() + 1; iter != container.end(); ++iter)
46 ret *= *iter;
47 return ret;
48}
49}
所有元素操作,返回一个值
constexpr auto Add(const C &container)
求和sum
constexpr auto Mul(const C &container)
求积product