std::valarray<T>::apply
From cppreference.com
| valarray<T> apply( T func(T) ) const; |
||
| valarray<T> apply( T func(const T&) ) const; |
||
要素の以前の値に関数funcを適用して取得した値を持つ、同じサイズの新しいvalarrayを返します。
目次 |
[編集] パラメータ
| func | - | 値に適用する関数 |
[編集] 戻り値
関数funcを適用して取得した値を持つ結果のvalarray。
[編集] 注記
この関数は、std::valarray とは異なる戻り値型で実装される場合があります。その場合、代替型は以下のプロパティを持ちます。
- std::valarray のすべての const メンバ関数が提供されます。
- std::valarray、std::slice_array、std::gslice_array、std::mask_array、および std::indirect_array は、代替型から構築できます。
- 2つの const std::valarray<T>& 引数を受け取るすべての関数について、代替型を受け取る同一の関数が追加されます(begin() および end() を除く)。
- 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
[編集] 関連項目
| 範囲内の要素に単項関数オブジェクトを適用する (関数テンプレート) | |
| (C++20) |
範囲内の要素に単項関数オブジェクトを適用する (アルゴリズム関数オブジェクト) |