std::pow(std::valarray)
來自 cppreference.com
定義於標頭檔案 <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, |
(2) | |
template< class T > std::valarray<T> pow( const typename std::valarray<T>::value_type& vbase, |
(3) | |
將值提升到冪。
1) 計算數值陣列 base 中每個元素的值,將其提升到由數值陣列 exp 中相應元素指定的冪。
如果 base.size() != exp.size(),則行為未定義。
2) 計算數值陣列 base 中每個元素的值,將其提升到冪 vexp。
3) 計算 vbase 的值,將其提升到由數值陣列 exp 中元素定義的冪。
目錄 |
[編輯] 引數
base | - | 包含基值的數值陣列 |
exp | - | 包含指數值的數值陣列 |
vbase | - | 定義基的值 |
vexp | - | 定義指數的值 |
[編輯] 返回值
包含冪運算結果的數值陣列。
[編輯] 注意
使用未限定函式(pow)執行計算。如果此類函式不可用,則由於依賴於引數的查詢,使用 std::pow。
該函式可以使用與 std::valarray 不同的返回型別實現。在這種情況下,替換型別具有以下屬性:
- 提供 std::valarray 的所有 const 成員函式。
- 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}; }
輸出
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) (函式) |
複數冪,一個或兩個引數可以是複數 (函式模板) |