std::valarray<T>::apply
valarray<T> apply( T func(T) ) const; | ||
valarray<T> apply( T func(const T&) ) const; |
Возвращает новый массив valarray той же размерности со значениями, полученными путём применения функции func к предыдущим значениям элементов.
Параметры
| func | - | функция, применяемая к значениям |
Значение результата
Результат valarray со значениями, полученными путём применения функции func.
Примечания
Функция может быть реализована с типом возвращаемого значения, отличным от 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) | применяет функцию к диапазону элементов (неблочный) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/numeric/valarray/apply