名稱空間
變體
操作

std::pow(std::valarray)

來自 cppreference.com
< cpp‎ | 數值‎ | valarray
 
 
 
 
定義於標頭檔案 <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 不同的返回型別實現。在這種情況下,替換型別具有以下屬性:

[編輯] 示例

#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};
}

輸出

pow(const std::valarray<T>& base, const std::valarray<T>& exp); (1)
base : 1  2  3  4  5  6  7
exp  : 0  1  2  3  4  5  6
pow  : 1⁰ 2¹ 3² 4³ 5⁴ 6⁵ 7⁶ = 1 2 9 64 625 7776 117649
 
pow(const std::valarray<T>& base, const value_type& vexp); (2)
base : 1  2  3  4  5  6  7
vexp : 5
pow  : 1⁵ 2⁵ 3⁵ 4⁵ 5⁵ 6⁵ 7⁵ = 1 32 243 1024 3125 7776 16807
 
pow(const value_type& vbase, const std::valarray<T>& exp); (3)
vbase: 2
exp  : 0  1  2  3  4  5  6
pow  : 2⁰ 2¹ 2² 2³ 2⁴ 2⁵ 2⁶ = 1 2 4 8 16 32 64

[編輯] 缺陷報告

下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。

缺陷報告 應用於 釋出時的行為 正確的行為
LWG 3074 C++98 對於 (2,3)T 從標量和 valarray 推導,不允許混合型別呼叫 僅從 valarray 推導 T

[編輯] 另請參閱

將函式 std::sqrt 應用於 valarray 的每個元素
(函式模板) [編輯]
(C++11)(C++11)
將數字提升到給定冪(xy
(函式) [編輯]
複數冪,一個或兩個引數可以是複數
(函式模板) [編輯]