标准库头文件 <numeric>

来自cppreference.com
< cpp‎ | header
 
 
 

此头文件是数值库的一部分。

[编辑] 函数

(C++11)
用从起始值开始连续递增的值填充区间
(函数模板) [编辑]
计算区间内元素的和
(函数模板) [编辑]
(C++17)
类似 std::accumulate ,除了以乱序
(函数模板) [编辑]
应用函数对象,然后以乱序规约
(函数模板) [编辑]
计算两个区间元素的内积
(函数模板) [编辑]
计算区间内相邻元素之间的差
(函数模板) [编辑]
计算区间内元素的部分和
(函数模板) [编辑]
类似 std::partial_sum ,第 i 个和中包含第 i 个输入
(函数模板) [编辑]
类似 std::partial_sum ,第 i 个和中排除第 i 个输入
(函数模板) [编辑]
应用函数对象,然后进行包含扫描
(函数模板) [编辑]
应用函数对象,然后进行排除扫描
(函数模板) [编辑]
(C++17)
返回二个整数最大公约数的 constexpr 函数模板
(函数模板) [编辑]
(C++17)
返回二个整数最小公倍数的 constexpr 函数模板
(函数模板) [编辑]
(C++20)
二个数或指针间的中点
(函数模板) [编辑]

[编辑] 概要

namespace std {
  // 积累
  template<class InputIt, class T>
    T accumulate(InputIt first, InputIt last, T init);
  template<class InputIt, class T, class BinaryOperation>
    T accumulate(InputIt first, InputIt last, T init, BinaryOperation binary_op);
 
  // 规约
  template<class InputIt>
    typename iterator_traits<InputIt>::value_type
      reduce(InputIt first, InputIt last);
  template<class InputIt, class T>
    T reduce(InputIt first, InputIt last, T init);
  template<class InputIt, class T, class BinaryOperation>
    T reduce(InputIt first, InputIt last, T init, BinaryOperation binary_op);
  template<class ExecutionPolicy, class ForwardIt>
    typename iterator_traits<ForwardIt>::value_type
      reduce(ExecutionPolicy&& exec,
             ForwardIt first, ForwardIt last);
  template<class ExecutionPolicy, class ForwardIt, class T>
    T reduce(ExecutionPolicy&& exec,
             ForwardIt first, ForwardIt last, T init);
  template<class ExecutionPolicy, class ForwardIt, class T, class BinaryOperation>
    T reduce(ExecutionPolicy&& exec,
             ForwardIt first, ForwardIt last, T init, BinaryOperation binary_op);
 
  // 内积
  template<class InputIt1, class InputIt2, class T>
    T inner_product(InputIt1 first1, InputIt1 last1,
                    InputIt2 first2, T init);
  template<class InputIt1, class InputIt2, class T,
           class BinaryOperation1, class BinaryOperation2>
    T inner_product(InputIt1 first1, InputIt1 last1,
                    InputIt2 first2, T init,
                    BinaryOperation1 binary_op1,
                    BinaryOperation2 binary_op2);
 
  // 变换规约
  template<class InputIt1, class InputIt2, class T>
    T transform_reduce(InputIt1 first1, InputIt1 last1,
                       InputIt2 first2,
                       T init);
  template<class InputIt1, class InputIt2, class T,
           class BinaryOperation1, class BinaryOperation2>
    T transform_reduce(InputIt1 first1, InputIt1 last1,
                       InputIt2 first2,
                       T init,
                       BinaryOperation1 binary_op1,
                       BinaryOperation2 binary_op2);
  template<class InputIt, class T,
           class BinaryOperation, class UnaryOperation>
    T transform_reduce(InputIt first, InputIt last,
                       T init,
                       BinaryOperation binary_op, UnaryOperation unary_op);
  template<class ExecutionPolicy,
           class ForwardIt1, class ForwardIt2, class T>
    T transform_reduce(ExecutionPolicy&& exec,
                       ForwardIt1 first1, ForwardIt1 last1,
                       ForwardIt2 first2,
                       T init);
  template<class ExecutionPolicy,
           class ForwardIt1, class ForwardIt2, class T,
           class BinaryOperation1, class BinaryOperation2>
    T transform_reduce(ExecutionPolicy&& exec,
                       ForwardIt1 first1, ForwardIt1 last1,
                       ForwardIt2 first2,
                       T init,
                       BinaryOperation1 binary_op1,
                       BinaryOperation2 binary_op2);
  template<class ExecutionPolicy,
           class ForwardIt, class T,
           class BinaryOperation, class UnaryOperation>
    T transform_reduce(ExecutionPolicy&& exec,
                       ForwardIt first, ForwardIt last,
                       T init,
                       BinaryOperation binary_op, UnaryOperation unary_op);
 
  // 部分和
  template<class InputIt, class OutputIt>
    OutputIt partial_sum(InputIt first,
                         InputIt last,
                         OutputIt result);
  template<class InputIt, class OutputIt, class BinaryOperation>
    OutputIt partial_sum(InputIt first,
                         InputIt last,
                         OutputIt result,
                         BinaryOperation binary_op);
 
  // 不包含扫描
  template<class InputIt, class OutputIt, class T>
    OutputIt exclusive_scan(InputIt first, InputIt last,
                            OutputIt result,
                            T init);
  template<class InputIt, class OutputIt, class T, class BinaryOperation>
    OutputIt exclusive_scan(InputIt first, InputIt last,
                            OutputIt result,
                            T init, BinaryOperation binary_op);
  template<class ExecutionPolicy, class ForwardIt1, class ForwardIt2, class T>
    ForwardIt2 exclusive_scan(ExecutionPolicy&& exec,
                              ForwardIt1 first, ForwardIt1 last,
                              ForwardIt2 result,
                              T init);
  template<class ExecutionPolicy, class ForwardIt1, class ForwardIt2, class T,
           class BinaryOperation>
    ForwardIt2 exclusive_scan(ExecutionPolicy&& exec,
                              ForwardIt1 first, ForwardIt1 last,
                              ForwardIt2 result,
                              T init, BinaryOperation binary_op);
 
  // 包含扫描
  template<class InputIt, class OutputIt>
    OutputIt inclusive_scan(InputIt first, InputIt last, OutputIt result);
  template<class InputIt, class OutputIt, class BinaryOperation>
    OutputIt inclusive_scan(InputIt first, InputIt last,
                            OutputIt result,
                            BinaryOperation binary_op);
  template<class InputIt, class OutputIt, class BinaryOperation, class T>
    OutputIt inclusive_scan(InputIt first, InputIt last,
                            OutputIt result,
                            BinaryOperation binary_op, T init);
  template<class ExecutionPolicy, class ForwardIt1, class ForwardIt2>
    ForwardIt2 inclusive_scan(ExecutionPolicy&& exec,
                              ForwardIt1 first, ForwardIt1 last,
                              ForwardIt2 result);
  template<class ExecutionPolicy, class ForwardIt1, class ForwardIt2,
           class BinaryOperation>
    ForwardIt2 inclusive_scan(ExecutionPolicy&& exec,
                              ForwardIt1 first, ForwardIt1 last,
                              ForwardIt2 result,
                              BinaryOperation binary_op);
  template<class ExecutionPolicy, class ForwardIt1, class ForwardIt2,
           class BinaryOperation, class T>
    ForwardIt2 inclusive_scan(ExecutionPolicy&& exec,
                              ForwardIt1 first, ForwardIt1 last,
                              ForwardIt2 result,
                              BinaryOperation binary_op, T init);
 
  // 变换不包含扫描
  template<class InputIt, class OutputIt, class T,
           class BinaryOperation, class UnaryOperation>
    OutputIt transform_exclusive_scan(InputIt first, InputIt last,
                                      OutputIt result,
                                      T init,
                                      BinaryOperation binary_op,
                                      UnaryOperation unary_op);
  template<class ExecutionPolicy,
           class ForwardIt1, class ForwardIt2, class T,
           class BinaryOperation, class UnaryOperation>
    ForwardIt2 transform_exclusive_scan(ExecutionPolicy&& exec,
                                        ForwardIt1 first, ForwardIt1 last,
                                        ForwardIt2 result,
                                        T init,
                                        BinaryOperation binary_op,
                                        UnaryOperation unary_op);
 
  // 变换包含扫描
  template<class InputIt, class OutputIt,
           class BinaryOperation, class UnaryOperation>
    OutputIt transform_inclusive_scan(InputIt first, InputIt last,
                                      OutputIt result,
                                      BinaryOperation binary_op,
                                      UnaryOperation unary_op);
  template<class InputIt, class OutputIt,
           class BinaryOperation, class UnaryOperation, class T>
    OutputIt transform_inclusive_scan(InputIt first, InputIt last,
                                      OutputIt result,
                                      BinaryOperation binary_op,
                                      UnaryOperation unary_op,
                                      T init);
  template<class ExecutionPolicy,
           class ForwardIt1, class ForwardIt2,
           class BinaryOperation, class UnaryOperation>
    ForwardIt2 transform_inclusive_scan(ExecutionPolicy&& exec,
                                        ForwardIt1 first, ForwardIt1 last,
                                        ForwardIt2 result,
                                        BinaryOperation binary_op,
                                        UnaryOperation unary_op);
  template<class ExecutionPolicy,
           class ForwardIt1, class ForwardIt2,
           class BinaryOperation, class UnaryOperation, class T>
    ForwardIt2 transform_inclusive_scan(ExecutionPolicy&& exec,
                                        ForwardIt1 first, ForwardIt1 last,
                                        ForwardIt2 result,
                                        BinaryOperation binary_op,
                                        UnaryOperation unary_op,
                                        T init);
 
  // 差分
  template<class InputIt, class OutputIt>
    OutputIt adjacent_difference(InputIt first, InputIt last,
                                 OutputIt result);
  template<class InputIt, class OutputIt, class BinaryOperation>
    OutputIt adjacent_difference(InputIt first, InputIt last,
                                 OutputIt result,
                                 BinaryOperation binary_op);
  template<class ExecutionPolicy, class ForwardIt1, class ForwardIt2>
    ForwardIt2 adjacent_difference(ExecutionPolicy&& exec,
                                   ForwardIt1 first, ForwardIt1 last,
                                   ForwardIt2 result);
  template<class ExecutionPolicy, class ForwardIt1, class ForwardIt2,
           class BinaryOperation>
    ForwardIt2 adjacent_difference(ExecutionPolicy&& exec,
                                   ForwardIt1 first, ForwardIt1 last,
                                   ForwardIt2 result,
                                   BinaryOperation binary_op);
 
  // iota
  template<class ForwardIt, class T>
    void iota(ForwardIt first, ForwardIt last, T value);
 
  // 最大公约数
  template<class M, class N>
    constexpr common_type_t<M, N> gcd(M m, N n);
 
  // 最小公倍数
  template<class M, class N>
    constexpr common_type_t<M, N> lcm(M m, N n);
 
  // 中点
  template<class T>
    constexpr T midpoint(T a, T b) noexcept;
  template<class T>
    constexpr T* midpoint(T* a, T* b);
}