名稱空間
變體
操作

std::valarray<T>::apply

來自 cppreference.com
< cpp‎ | numeric‎ | valarray
 
 
 
 
valarray<T> apply( T func(T) ) const;
valarray<T> apply( T func(const T&) ) const;

返回一個新的相同大小的valarray,其值透過對元素的前一個值應用函式func獲得。

目錄

[編輯] 引數

func - 要應用於值的函式

[編輯] 返回值

透過應用函式func獲得值的結果valarray。

[編輯] 注意

該函式可以使用與 std::valarray 不同的返回型別實現。在這種情況下,替換型別具有以下屬性:

[編輯] 可能的實現

以下直接的實現可以被表示式模板替換以獲得更高的效率。

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

[編輯] 參閱

範圍中的元素應用一元函式物件
(函式模板) [編輯]
範圍中的元素應用一元函式物件
(演算法函式物件)[編輯]