std::valarray<T>::apply
cppreference.net에서
valarray<T> apply( T func(T) ) const;
|
||
valarray<T> apply( T func(const T&) ) const;
|
||
함수 func를 요소의 이전 값에 적용하여 얻은 값을 가진 동일한 크기의 새로운 valarray를 반환합니다.
매개변수
| 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부터)를 제외하고, 대체 타입을 받는 동일한 함수들이 추가되어야 합니다; - 두 개의
const std::valarray<T>&인수를 받는 모든 함수에 대해,const std::valarray<T>&과 대체 타입의 모든 조합을 받는 동일한 함수들이 추가되어야 합니다. - 반환 타입은 가장 깊게 중첩된 인수 타입보다 두 단계 이상의 템플릿 중첩을 추가하지 않습니다.
가능한 구현
다음 단순한 구현들은 더 높은 효율성을 위해 표현식 템플릿으로 대체될 수 있습니다.
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) |
|
(C++20) |
단항 함수 객체를 범위 의 요소에 적용합니다(알고리즘 함수 객체) |