1#ifndef MSTL_CORE_ALGORITHM_NUMERIC_HPP__
2#define MSTL_CORE_ALGORITHM_NUMERIC_HPP__
35template <
typename Iterator,
typename T,
typename BinaryOperation,
37MSTL_CONSTEXPR20 T
accumulate(Iterator first, Iterator second, T init, BinaryOperation binary_op) {
38 for (; first != second; ++first) {
39 init = binary_op(init, *first);
55template <
typename Iterator,
typename T>
56MSTL_CONSTEXPR20 T
accumulate(Iterator first, Iterator second, T init) {
73template <
typename Iterator1,
typename Iterator2,
typename BinaryOperation,
76 Iterator1 first, Iterator1 last,
77 Iterator2 result, BinaryOperation binary_op) {
78 if (first == last)
return result;
82 while (++first != last) {
84 *++result = binary_op(tem, value);
101template <
typename Iterator1,
typename Iterator2>
123template <
typename Iterator1,
typename Iterator2,
typename T,
typename BinaryOperation1,
typename BinaryOperation2,
125MSTL_CONSTEXPR20 T
inner_product(Iterator1 first1, Iterator1 last1, Iterator2 first2, T init,
126 BinaryOperation1 binary_op1, BinaryOperation2 binary_op2) {
127 for (; first1 != last1; ++first1, ++first2) {
128 init = binary_op1(init, binary_op2(*first1, *first2));
146template <
typename Iterator1,
typename Iterator2,
typename T>
147MSTL_CONSTEXPR20 T
inner_product(Iterator1 first1, Iterator1 last1, Iterator2 first2, T init) {
164template <
typename Iterator1,
typename Iterator2,
typename BinaryOperation,
166MSTL_CONSTEXPR20 Iterator2
partial_sum(Iterator1 first, Iterator1 last, Iterator2 result, BinaryOperation binary_op) {
167 if (first == last)
return result;
170 while (++first != last) {
171 value = binary_op(value, *first);
188template <
typename Iterator1,
typename Iterator2>
189MSTL_CONSTEXPR20 Iterator2
partial_sum(Iterator1 first, Iterator1 last, Iterator2 result) {
203template <
typename Iterator,
typename T, enable_if_t<is_ranges_input_iter_v<Iterator>,
int> = 0>
204MSTL_CONSTEXPR20
void sequence_fill(Iterator first, Iterator last, T value) {
205 while (first != last) {
MSTL_INLINE17 constexpr bool is_ranges_input_iter_v
检查是否为范围输入迭代器
typename iterator_traits< Iterator >::value_type iter_value_t
获取迭代器的值类型
#define _MSTL
全局命名空间MSTL前缀
#define MSTL_END_NAMESPACE__
结束全局命名空间MSTL
#define MSTL_BEGIN_NAMESPACE__
开始全局命名空间MSTL
MSTL_CONSTEXPR20 void sequence_fill(Iterator first, Iterator last, T value)
顺序填充递增序列
MSTL_CONSTEXPR20 Iterator2 partial_sum(Iterator1 first, Iterator1 last, Iterator2 result, BinaryOperation binary_op)
部分和计算
MSTL_CONSTEXPR20 Iterator2 adjacent_difference(Iterator1 first, Iterator1 last, Iterator2 result, BinaryOperation binary_op)
相邻差分计算
MSTL_CONSTEXPR20 T accumulate(Iterator first, Iterator second, T init, BinaryOperation binary_op)
累积计算
MSTL_CONSTEXPR20 T inner_product(Iterator1 first1, Iterator1 last1, Iterator2 first2, T init, BinaryOperation1 binary_op1, BinaryOperation2 binary_op2)
内积计算
typename enable_if< Test, T >::type enable_if_t
enable_if的便捷别名