56 #ifndef _STL_NUMERIC_H 57 #define _STL_NUMERIC_H 1 63 #if __cplusplus >= 201103L 65 namespace std _GLIBCXX_VISIBILITY(default)
67 _GLIBCXX_BEGIN_NAMESPACE_VERSION
80 template<
typename _ForwardIterator,
typename _Tp>
82 iota(_ForwardIterator __first, _ForwardIterator __last, _Tp __value)
85 __glibcxx_function_requires(_Mutable_ForwardIteratorConcept<
87 __glibcxx_function_requires(_ConvertibleConcept<_Tp,
88 typename iterator_traits<_ForwardIterator>::value_type>)
89 __glibcxx_requires_valid_range(__first, __last);
91 for (; __first != __last; ++__first)
98 _GLIBCXX_END_NAMESPACE_VERSION
103 namespace std _GLIBCXX_VISIBILITY(default)
105 _GLIBCXX_BEGIN_NAMESPACE_ALGO
107 #if __cplusplus > 201703L 110 # define _GLIBCXX_MOVE_IF_20(_E) std::move(_E) 112 # define _GLIBCXX_MOVE_IF_20(_E) _E 126 template<
typename _InputIterator,
typename _Tp>
128 accumulate(_InputIterator __first, _InputIterator __last, _Tp __init)
131 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
132 __glibcxx_requires_valid_range(__first, __last);
134 for (; __first != __last; ++__first)
135 __init = _GLIBCXX_MOVE_IF_20(__init) + *__first;
152 template<
typename _InputIterator,
typename _Tp,
typename _BinaryOperation>
154 accumulate(_InputIterator __first, _InputIterator __last, _Tp __init,
155 _BinaryOperation __binary_op)
158 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
159 __glibcxx_requires_valid_range(__first, __last);
161 for (; __first != __last; ++__first)
162 __init = __binary_op(_GLIBCXX_MOVE_IF_20(__init), *__first);
180 template<
typename _InputIterator1,
typename _InputIterator2,
typename _Tp>
183 _InputIterator2 __first2, _Tp __init)
186 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>)
187 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>)
188 __glibcxx_requires_valid_range(__first1, __last1);
190 for (; __first1 != __last1; ++__first1, (void)++__first2)
191 __init = _GLIBCXX_MOVE_IF_20(__init) + (*__first1 * *__first2);
211 template<
typename _InputIterator1,
typename _InputIterator2,
typename _Tp,
212 typename _BinaryOperation1,
typename _BinaryOperation2>
215 _InputIterator2 __first2, _Tp __init,
216 _BinaryOperation1 __binary_op1,
217 _BinaryOperation2 __binary_op2)
220 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator1>)
221 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator2>)
222 __glibcxx_requires_valid_range(__first1, __last1);
224 for (; __first1 != __last1; ++__first1, (void)++__first2)
225 __init = __binary_op1(_GLIBCXX_MOVE_IF_20(__init),
226 __binary_op2(*__first1, *__first2));
244 template<
typename _InputIterator,
typename _OutputIterator>
247 _OutputIterator __result)
249 typedef typename iterator_traits<_InputIterator>::value_type _ValueType;
252 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
253 __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
255 __glibcxx_requires_valid_range(__first, __last);
257 if (__first == __last)
259 _ValueType __value = *__first;
261 while (++__first != __last)
263 __value = _GLIBCXX_MOVE_IF_20(__value) + *__first;
264 *++__result = __value;
284 template<
typename _InputIterator,
typename _OutputIterator,
285 typename _BinaryOperation>
288 _OutputIterator __result, _BinaryOperation __binary_op)
290 typedef typename iterator_traits<_InputIterator>::value_type _ValueType;
293 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
294 __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
296 __glibcxx_requires_valid_range(__first, __last);
298 if (__first == __last)
300 _ValueType __value = *__first;
302 while (++__first != __last)
304 __value = __binary_op(_GLIBCXX_MOVE_IF_20(__value), *__first);
305 *++__result = __value;
324 template<
typename _InputIterator,
typename _OutputIterator>
327 _InputIterator __last, _OutputIterator __result)
329 typedef typename iterator_traits<_InputIterator>::value_type _ValueType;
332 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
333 __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
335 __glibcxx_requires_valid_range(__first, __last);
337 if (__first == __last)
339 _ValueType __value = *__first;
341 while (++__first != __last)
343 _ValueType __tmp = *__first;
344 *++__result = __tmp - _GLIBCXX_MOVE_IF_20(__value);
345 __value = _GLIBCXX_MOVE(__tmp);
366 template<
typename _InputIterator,
typename _OutputIterator,
367 typename _BinaryOperation>
370 _OutputIterator __result, _BinaryOperation __binary_op)
372 typedef typename iterator_traits<_InputIterator>::value_type _ValueType;
375 __glibcxx_function_requires(_InputIteratorConcept<_InputIterator>)
376 __glibcxx_function_requires(_OutputIteratorConcept<_OutputIterator,
378 __glibcxx_requires_valid_range(__first, __last);
380 if (__first == __last)
382 _ValueType __value = *__first;
384 while (++__first != __last)
386 _ValueType __tmp = *__first;
387 *++__result = __binary_op(__tmp, _GLIBCXX_MOVE_IF_20(__value));
388 __value = _GLIBCXX_MOVE(__tmp);
393 #undef _GLIBCXX_MOVE_IF_20 395 _GLIBCXX_END_NAMESPACE_ALGO
_Tp accumulate(_InputIterator __first, _InputIterator __last, _Tp __init)
Accumulate values in a range.
ISO C++ entities toplevel namespace is std.
_Tp inner_product(_InputIterator1 __first1, _InputIterator1 __last1, _InputIterator2 __first2, _Tp __init)
Compute inner product of two ranges.
_OutputIterator partial_sum(_InputIterator __first, _InputIterator __last, _OutputIterator __result)
Return list of partial sums.
void iota(_ForwardIterator __first, _ForwardIterator __last, _Tp __value)
Create a range of sequentially increasing values.
_OutputIterator adjacent_difference(_InputIterator __first, _InputIterator __last, _OutputIterator __result)
Return differences between adjacent values.