std::pow(std::valarray)
来自 zh.cppreference.net
| 定义于头文件 <valarray>
|
||
template< class T >
std::valarray<T> pow( const std::valarray<T>& base, const std::valarray<T>& exp );
|
(1) | |
template< class T >
std::valarray<T> pow( const std::valarray<T>& base,
const typename std::valarray<T>::value_type& vexp );
|
(2) | |
template< class T >
std::valarray<T> pow( const typename std::valarray<T>::value_type& vbase,
const std::valarray<T>& exp );
|
(3) | |
计算一个值的幂。
1) 计算数值数组
base 中每个元素以数值数组 exp 中对应元素为指数的幂。若 base.size() != exp.size(),则行为未定义。
2) 计算数值数组
base 中每个元素以 vexp 为指数的幂。3) 计算
vbase 以数值数组 exp 中元素为指数的幂。参数
| base | - | 包含底数值的数值数组 |
| exp | - | 包含指数值的数值数组 |
| vbase | - | 定义底数的数值 |
| vexp | - | 定义指数的数值 |
返回值
包含幂运算结果的数值数组。
注意
使用非限定函数(pow)执行计算。如果该函数不可用,则通过std::pow实参依赖查找使用。
该函数可以以实现返回值类型不同于std::valarray的方式实现。在此情况下,替换类型具有以下属性:
- 提供
conststd::valarray的所有成员函数 - 。可由替换类型构造std::valarray、std::slice_array、std::gslice_array、std::mask_array和std::indirect_array
- 。对于每个接受
const std::valarray<T>&参数的函数(begin()和end()(C++11起)除外),应添加接受替换类型的相同函数; - 对于每个接受两个
const std::valarray<T>&参数的函数,应添加接受const std::valarray<T>&和替换类型所有组合的相同函数。 - 返回值类型不增加超过嵌套最深参数类型的模板嵌套层级(最多两层)。
示例
运行此代码
#include <cmath> #include <cstddef> #include <iomanip> #include <iostream> #include <valarray> class show { friend std::ostream& operator<<(std::ostream& os, show const& r) { constexpr char const* sup[] { "\u2070", "\u00B9", "\u00B2", "\u00B3", "\u2074", "\u2075", "\u2076", "\u2077", "\u2078", "\u2079" }; for (std::size_t n = 0; n != r.bases.size(); ++n) { os << std::left << r.bases[n] << std::left; if (n < r.exponents.size()) os << sup[r.exponents[n] % 10] << ' '; else os << " "; } if (r.results.size() != 0) { os << '='; for (std::size_t n = 0; n != r.results.size(); ++n) os << ' ' << r.results[n]; } return os << '\n'; } public: std::valarray<int> bases{}, exponents{}, results{}; }; int main() { constexpr int base{2}; constexpr int exponent{5}; const std::valarray<int> bases{1, 2, 3, 4, 5, 6, 7}; const std::valarray<int> exponents{0, 1, 2, 3, 4, 5, 6}; const std::valarray<int> powers1 = std::pow(bases, exponents); const std::valarray<int> powers2 = std::pow(bases, exponent); const std::valarray<int> powers3 = std::pow(base, exponents); std::cout << "pow(const std::valarray<T>& base, const std::valarray<T>& exp); (1)\n" << "base : " << show{bases} << "exp : " << show{exponents} << "pow : " << show{bases, exponents, powers1} << '\n' << "pow(const std::valarray<T>& base, const value_type& vexp); (2)\n" << "base : " << show{bases} << "vexp : " << exponent << '\n' << "pow : " << show{bases, std::valarray<int>(exponent, bases.size()), powers2} << '\n' << "pow(const value_type& vbase, const std::valarray<T>& exp); (3)\n" << "vbase: " << base << '\n' << "exp : " << show{exponents} << "pow : " << show{std::valarray<int>(base, bases.size()), exponents, powers3
缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的C++标准。
| 缺陷报告 | 适用范围 | 发布时行为 | 正确行为 |
|---|---|---|---|
| LWG 3074 | C++98 |
T
同时从标量和
valarray
推导
(2,3)
,不允许混合类型调用
|
仅从
valarray
推导
T
|
参见
|
对 valarray 的每个元素应用函数
std::sqrt
(函数模板) |
|
|
(C++11)
(C++11)
|
求数的指定次幂 (
x
y
)
(函数) |
|
复数幂运算,一个或两个参数可以是复数
(函数模板) |