Namespaces
Variants

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 )
(函数)
复数幂运算,一个或两个参数可以是复数
(函数模板)