Spec-Zone.ru › C++

std::valarray

Определено в заголовочном файле <valarray>
template< class T >
class valarray;

std::valarray — это класс для представления и обработки массивов значений. Он поддерживает поэлементные математические операции, различные формы обобщённых операторов индексации, срезы и косвенный доступ.

Параметры шаблона

T - тип элементов. Тип должен удовлетворять требованиям NumericType

Типы-члены

Тип-член Определение
value_type T
iterator(C++11) неуточнённый тип изменяемого итератора, удовлетворяющий требованиям LegacyRandomAccessIterator и требованиям LegacyContiguousIterator(до C++20)и моделирующий contiguous_iterator(начиная с C++20), такой, что
  • std::iterator_traits<iterator>::value_type — это T, а
  • std::iterator_traits<iterator>::reference — это T&
const_iterator(C++11) неуточнённый тип константного итератора, удовлетворяющий требованиям LegacyRandomAccessIterator и требованиям LegacyContiguousIterator(до C++20)и моделирующий contiguous_iterator(начиная с C++20), такой, что
  • std::iterator_traits<const_iterator>::value_type — это T, а
  • std::iterator_traits<const_iterator>::reference — это constT&

Функции-члены

(конструктор)
создаёт новый числовой массив
(открытая функция-член)
(деструктор)
уничтожает числовой массив
(открытая функция-член)
operator=
присваивает содержимое
(открытая функция-член)
operator[]
получает или задаёт элемент, срез или маску valarray
(открытая функция-член)
operator+operator-operator~operator!
применяет унарный арифметический оператор к каждому элементу valarray
(открытая функция-член)
operator+=operator-=operator*=operator/=operator%=operator&=operator|=operator^=operator<<=operator>>=
применяет оператор составного присваивания к каждому элементу valarray
(открытая функция-член)
swap
обменивается содержимым с другим valarray
(открытая функция-член)
size
возвращает размер valarray
(открытая функция-член)
resize
изменяет размер valarray
(открытая функция-член)
sum
вычисляет сумму всех элементов
(открытая функция-член)
min
возвращает наименьший элемент
(открытая функция-член)
max
возвращает наибольший элемент
(открытая функция-член)
shift
сдвигает элементы valarray, заполняя освободившиеся позиции нулями
(открытая функция-член)
cshift
циклически сдвигает элементы valarray
(открытая функция-член)
apply
применяет функцию к каждому элементу valarray
(открытая функция-член)
begin
(C++11)
получает итератор на начало valarray
(открытая функция-член)
end
(C++11)
получает итератор за последним элементом valarray
(открытая функция-член)

Функции, не являющиеся членами

std::swap(std::valarray)
(C++11)
специализирует алгоритм std::swap
(шаблон функции)
operator+operator-operator*operator/operator%operator&operator|operator^operator<<operator>>operator&&operator
применяет бинарные операторы к каждому элементу двух valarray либо valarray и значения
(шаблон функции)
operator==operator!=operator<operator<=operator>operator>=
сравнивает два valarray или valarray со значением
(шаблон функции)
abs(std::valarray)
применяет функцию abs к каждому элементу valarray
(шаблон функции)
Экспоненциальные функции
exp(std::valarray)
применяет функцию std::exp к каждому элементу valarray
(шаблон функции)
log(std::valarray)
применяет функцию std::log к каждому элементу valarray
(шаблон функции)
log10(std::valarray)
применяет функцию std::log10 к каждому элементу valarray
(шаблон функции)
Функции возведения в степень
pow(std::valarray)
применяет функцию std::pow к двум valarray либо valarray и значению
(шаблон функции)
sqrt(std::valarray)
применяет функцию std::sqrt к каждому элементу valarray
(шаблон функции)
Тригонометрические функции
sin(std::valarray)
применяет функцию std::sin к каждому элементу valarray
(шаблон функции)
cos(std::valarray)
применяет функцию std::cos к каждому элементу valarray
(шаблон функции)
tan(std::valarray)
применяет функцию std::tan к каждому элементу valarray
(шаблон функции)
asin(std::valarray)
применяет функцию std::asin к каждому элементу valarray
(шаблон функции)
acos(std::valarray)
применяет функцию std::acos к каждому элементу valarray
(шаблон функции)
atan(std::valarray)
применяет функцию std::atan к каждому элементу valarray
(шаблон функции)
atan2(std::valarray)
применяет функцию std::atan2 к valarray и значению
(шаблон функции)
Гиперболические функции
sinh(std::valarray)
применяет функцию std::sinh к каждому элементу valarray
(шаблон функции)
cosh(std::valarray)
применяет функцию std::cosh к каждому элементу valarray
(шаблон функции)
tanh(std::valarray)
применяет функцию std::tanh к каждому элементу valarray
(шаблон функции)

Вспомогательные классы

slice
срез valarray в стиле BLAS: начальный индекс, длина, шаг
(класс)
slice_array
прокси для подмножества valarray после применения среза
(шаблон класса)
gslice
обобщённый срез valarray: начальный индекс, набор длин, набор шагов
(класс)
gslice_array
прокси для подмножества valarray после применения gslice
(шаблон класса)
mask_array
прокси для подмножества valarray после применения булевой маски operator[]
(шаблон класса)
indirect_array
прокси для подмножества valarray после применения косвенной индексации operator[]
(шаблон класса)

Руководства по выводу типов(начиная с C++17)

Примечания

std::valarray и вспомогательные классы определены так, чтобы исключить некоторые формы алиасинга, что позволяет оптимизировать операции с этими классами аналогично действию ключевого слова restrict в языке программирования C. Кроме того, функциям и операторам, принимающим аргументы valarray, разрешено возвращать прокси-объекты, чтобы компилятор мог оптимизировать выражение, например v1 = a * v2 + v3;, в один цикл, выполняющий v1[i] = a * v2[i] + v3[i];, избегая временных объектов и нескольких проходов. Однако шаблоны выражений предоставляют ту же возможность оптимизации для любого контейнера C++, и большинство числовых библиотек предпочитают шаблоны выражений valarray ради большей гибкости. В некоторых реализациях стандартной библиотеки C++ шаблоны выражений используются для реализации эффективных операций с std::valarray (например, в GNU libstdc++ и LLVM libc++). Лишь изредка valarray дополнительно оптимизируются, например в Intel Integrated Performance Primitives.

Макрос проверки наличия возможности Значение Стандарт Возможность
__cpp_lib_valarray 202511L (C++26)
(DR11)
begin и end функции-члены, а также iterator и const_iterator типы-члены std::valarray[1]
  1. По состоянию на 2026-05-27 libstdc++ не рассматривала изменения begin и end функций из P3016R6 как отчёт об ошибке для C++11 и применяет эти изменения только начиная с C++26.

Отчёты об ошибках

Следующие отчёты об ошибках, изменяющие поведение, были ретроспективно применены к ранее опубликованным стандартам C++.

DR Применён к Опубликованное поведение Корректное поведение
P3016R6 C++11 1) В valarray отсутствовали типы-члены iterator и const_iterator
2) В valarray функции begin() и end(), не являющиеся членами, имели несогласованные сигнатуры
1) добавлены типы-члены
2) заменены функциями-членами

См. также

simd::basic_vec
(C++26)
тип векторных данных для параллельной обработки
(шаблон класса)
simd::vec
(C++26)
удобный псевдоним шаблона для basic_vec, позволяющий задавать его ширину
(шаблон псевдонима)
simd::basic_mask
(C++26)
тип данных для параллельной обработки с типом элементов bool
(шаблон класса)
simd::mask
(C++26)
удобный псевдоним шаблона для basic_mask, позволяющий задавать его ширину
(шаблон псевдонима)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/numeric/valarray

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API