std::valarray<T>:: apply
From cppreference.net
|
valarray
<
T
>
apply
(
T func
(
T
)
)
const
;
|
||
|
valarray
<
T
>
apply
(
T func
(
const
T
&
)
)
const
;
|
||
同じサイズの新しいvalarrayを返します。その値は、要素の以前の値に関数
func
を適用して取得されます。
目次 |
パラメータ
| func | - | 値に適用する関数 |
戻り値
関数
func
を適用して取得された値を持つ結果のvalarray。
注記
この関数は、戻り値の型が std::valarray と異なる型で実装される場合があります。この場合、置換型は以下の特性を持ちます:
-
- const メンバ関数の全てが std::valarray に対して提供される。
- std::valarray , std::slice_array , std::gslice_array , std::mask_array および std::indirect_array は置換型から構築可能である。
- const std:: valarray < T > & を引数に取る全ての関数 ( begin() および end() を除く (C++11以降) に対して、置換型を取る同一の関数が追加される;
- 2つの const std:: valarray < T > & 引数を取る全ての関数に対して、 const std:: valarray < T > & と置換型のあらゆる組み合わせを取る同一の関数が追加される。
- 戻り値の型は、最も深くネストされた引数型に対して2レベルを超えるテンプレートのネストを追加しない。
実装例
以下の単純な実装は、より高い効率のために式テンプレートで置き換えることができます。
template<class T> valarray<T> valarray<T>::apply(T func(T)) const { valarray<T> other = *this; for (T& i : other) i = func(i); return other; } template<class T> valarray<T> valarray<T>::apply(T func(const T&)) const { valarray<T> other = *this; for (T& i : other) i = func(i); return other; } |
例
最初の10個の階乗を計算して表示します。
このコードを実行
#include <cmath> #include <iostream> #include <valarray> int main() { std::valarray<int> v = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; v = v.apply([](int n) -> int { return std::round(std::tgamma(n + 1)); }); for (auto n : v) std::cout << n << ' '; std::cout << '\n'; }
出力:
1 2 6 24 120 720 5040 40320 362880 3628800
関連項目
|
単項
function object
を
range
の要素に適用する
(関数テンプレート) |
|
|
(C++20)
|
単項
function object
を
range
の要素に適用する
(アルゴリズム関数オブジェクト) |