MSTL 1.4.0
A Modern C++ Library with extended functionality, web components, and utility libraries
载入中...
搜索中...
未找到
numeric.hpp
浏览该文件的文档.
1#ifndef MSTL_CORE_ALGORITHM_NUMERIC_HPP__
2#define MSTL_CORE_ALGORITHM_NUMERIC_HPP__
3
11
15
21
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);
40 }
41 return init;
42}
43
55template <typename Iterator, typename T>
56MSTL_CONSTEXPR20 T accumulate(Iterator first, Iterator second, T init) {
57 return _MSTL accumulate(first, second, init, _MSTL plus<T>());
58}
59
73template <typename Iterator1, typename Iterator2, typename BinaryOperation,
75MSTL_CONSTEXPR20 Iterator2 adjacent_difference(
76 Iterator1 first, Iterator1 last,
77 Iterator2 result, BinaryOperation binary_op) {
78 if (first == last) return result;
80 *result = *first;
81 T value = *first;
82 while (++first != last) {
83 T tem = *first;
84 *++result = binary_op(tem, value);
85 value = tem;
86 }
87 return ++result;
88}
89
101template <typename Iterator1, typename Iterator2>
102MSTL_CONSTEXPR20 Iterator2 adjacent_difference(Iterator1 first, Iterator1 last, Iterator2 result) {
103 return _MSTL adjacent_difference(first, last, result, _MSTL minus<iter_value_t<Iterator1>>());
104}
105
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));
129 }
130 return init;
131}
132
146template <typename Iterator1, typename Iterator2, typename T>
147MSTL_CONSTEXPR20 T inner_product(Iterator1 first1, Iterator1 last1, Iterator2 first2, T init) {
148 return _MSTL inner_product(first1, last1, first2, init, _MSTL plus<T>(), _MSTL multiplies<T>());
149}
150
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;
168 *result = *first;
169 iter_value_t<Iterator1> value = *first;
170 while (++first != last) {
171 value = binary_op(value, *first);
172 *++result = value;
173 }
174 return ++result;
175}
176
188template <typename Iterator1, typename Iterator2>
189MSTL_CONSTEXPR20 Iterator2 partial_sum(Iterator1 first, Iterator1 last, Iterator2 result) {
190 return _MSTL partial_sum(first, last, result, _MSTL plus<iter_value_t<Iterator1>>());
191}
192
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) {
206 *first++ = value;
207 ++value;
208 }
209}
210 // NumericAlgorithms
212
214#endif // MSTL_CORE_ALGORITHM_NUMERIC_HPP__
MSTL概念和类型约束
MSTL仿函数
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的便捷别名
减法运算仿函数
乘法运算仿函数
加法运算仿函数