标准库头文件 <numeric>
来自cppreference.com
此头文件是数值库的一部分。
函数
(C++11) |
用从起始值开始连续递增的值填充一个范围 (函数模板) |
对一个范围内的元素求和 (函数模板) | |
(C++17) |
类似 std::accumulate,但不依序执行 (函数模板) |
(C++17) |
应用一个函数对象,然后以乱序规约 (函数模板) |
计算两个范围的元素的内积 (函数模板) | |
计算范围内各相邻元素之间的差 (函数模板) | |
计算范围内元素的部分和 (函数模板) | |
(C++17) |
类似 std::partial_sum,第 i 个和中包含第 i 个输入 (函数模板) |
(C++17) |
类似 std::partial_sum,第 i 个和中排除第 i 个输入 (函数模板) |
(C++17) |
应用一个函数对象,然后进行包含扫描 (函数模板) |
(C++17) |
应用一个函数对象,然后进行排除扫描 (函数模板) |
(C++17) |
返回二个整数最大公约数的 constexpr 函数模板 (函数模板) |
(C++17) |
返回二个整数最小公倍数的 constexpr 函数模板 (函数模板) |
(C++20) |
两个数值或指针间的中点 (函数模板) |
概要
namespace std { // 累加(accumulate) 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); // 规约(reduce) 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); // 内积(inner product) 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); // 临差(adjacent difference) 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); }