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), такой, что
|
const_iterator(C++11) | неуточнённый тип константного итератора, удовлетворяющий требованиям LegacyRandomAccessIterator и требованиям LegacyContiguousIterator(до C++20)и моделирующий contiguous_iterator(начиная с C++20), такой, что
|
Функции-члены
| создаёт новый числовой массив (открытая функция-член) |
|
| уничтожает числовой массив (открытая функция-член) |
|
| присваивает содержимое (открытая функция-член) |
|
| получает или задаёт элемент, срез или маску valarray (открытая функция-член) |
|
| применяет унарный арифметический оператор к каждому элементу valarray (открытая функция-член) |
|
| применяет оператор составного присваивания к каждому элементу valarray (открытая функция-член) |
|
| обменивается содержимым с другим valarray (открытая функция-член) |
|
| возвращает размер valarray (открытая функция-член) |
|
| изменяет размер valarray (открытая функция-член) |
|
| вычисляет сумму всех элементов (открытая функция-член) |
|
| возвращает наименьший элемент (открытая функция-член) |
|
| возвращает наибольший элемент (открытая функция-член) |
|
| сдвигает элементы valarray, заполняя освободившиеся позиции нулями (открытая функция-член) |
|
| циклически сдвигает элементы valarray (открытая функция-член) |
|
| применяет функцию к каждому элементу valarray (открытая функция-член) |
|
|
(C++11) | получает итератор на начало valarray (открытая функция-член) |
|
(C++11) | получает итератор за последним элементом valarray (открытая функция-член) |
Функции, не являющиеся членами
|
(C++11) | специализирует алгоритм std::swap (шаблон функции) |
| применяет бинарные операторы к каждому элементу двух valarray либо valarray и значения (шаблон функции) |
|
| сравнивает два valarray или valarray со значением (шаблон функции) |
|
применяет функцию abs к каждому элементу valarray (шаблон функции) |
|
Экспоненциальные функции |
|
применяет функцию std::exp к каждому элементу valarray (шаблон функции) |
|
применяет функцию std::log к каждому элементу valarray (шаблон функции) |
|
применяет функцию std::log10 к каждому элементу valarray (шаблон функции) |
|
Функции возведения в степень |
|
применяет функцию std::pow к двум valarray либо valarray и значению (шаблон функции) |
|
применяет функцию std::sqrt к каждому элементу valarray (шаблон функции) |
|
Тригонометрические функции |
|
применяет функцию std::sin к каждому элементу valarray (шаблон функции) |
|
применяет функцию std::cos к каждому элементу valarray (шаблон функции) |
|
применяет функцию std::tan к каждому элементу valarray (шаблон функции) |
|
применяет функцию std::asin к каждому элементу valarray (шаблон функции) |
|
применяет функцию std::acos к каждому элементу valarray (шаблон функции) |
|
применяет функцию std::atan к каждому элементу valarray (шаблон функции) |
|
применяет функцию std::atan2 к valarray и значению (шаблон функции) |
|
Гиперболические функции |
|
применяет функцию std::sinh к каждому элементу valarray (шаблон функции) |
|
применяет функцию std::cosh к каждому элементу valarray (шаблон функции) |
|
применяет функцию std::tanh к каждому элементу valarray (шаблон функции) |
|
Вспомогательные классы
| срез valarray в стиле BLAS: начальный индекс, длина, шаг (класс) |
|
| прокси для подмножества valarray после применения среза (шаблон класса) |
|
| обобщённый срез valarray: начальный индекс, набор длин, набор шагов (класс) |
|
| прокси для подмножества valarray после применения gslice (шаблон класса) |
|
прокси для подмножества valarray после применения булевой маски operator[] (шаблон класса) |
|
прокси для подмножества 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] |
- По состоянию на 2026-05-27 libstdc++ не рассматривала изменения
beginиendфункций из P3016R6 как отчёт об ошибке для C++11 и применяет эти изменения только начиная с C++26.
Отчёты об ошибках
Следующие отчёты об ошибках, изменяющие поведение, были ретроспективно применены к ранее опубликованным стандартам C++.
| DR | Применён к | Опубликованное поведение | Корректное поведение |
|---|---|---|---|
| P3016R6 | C++11 | 1) В valarray отсутствовали типы-члены iterator и const_iterator2) В valarray функции begin() и end(), не являющиеся членами, имели несогласованные сигнатуры | 1) добавлены типы-члены 2) заменены функциями-членами |
См. также
|
(C++26) | тип векторных данных для параллельной обработки (шаблон класса) |
|
(C++26) | удобный псевдоним шаблона для basic_vec, позволяющий задавать его ширину(шаблон псевдонима) |
|
(C++26) | тип данных для параллельной обработки с типом элементов bool (шаблон класса) |
|
(C++26) | удобный псевдоним шаблона для basic_mask, позволяющий задавать его ширину(шаблон псевдонима) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/numeric/valarray