在标头 <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_typeT,而
  • std::iterator_traits<iterator>::referenceT&
const_iterator(C++11) 未指定的常量迭代器类型,符合老式随机访问迭代器 (LegacyRandomAccessIterator) 要求老式连续迭代器 (LegacyContiguousIterator) 要求(C++20 前)并实现 contiguous_iterator(C++20 起),并使得
  • std::iterator_traits<const_iterator>::value_typeT,而
  • std::iterator_traits<const_iterator>::referenceconst T&

成员函数

构造新的数值数组
(公开成员函数)
析构数值数组
(公开成员函数)
为内容赋值
(公开成员函数)
获取/设置 valarray 数组元素、切片或掩码
(公开成员函数)
对 valarray 的每个元素运用一元算术运算符
(公开成员函数)
对 valarray 的每个元素应用复合赋值运算符
(公开成员函数)
与另一 valarray 交换
(公开成员函数)
返回 valarray 的大小
(公开成员函数)
更改 valarray 的大小
(公开成员函数)
计算所有元素的和
(公开成员函数)
返回最小元素
(公开成员函数)
返回最大的元素
(公开成员函数)
以填入零的方式移动 valarray 的元素
(公开成员函数)
循环移动 valarray 的元素
(公开成员函数)
valarray 的每个元素应用一个函数
(公开成员函数)
(C++11)
获取 valarray 的起始迭代器
(公开成员函数)
(C++11)
获取 valarray 的尾后迭代器
(公开成员函数)

非成员函数

特化 std::swap 算法
(函数模板)
应用二元运算符到两个 valarray 的每个元素,或一个 valarray 的每个元素和一个值
(函数模板)
比较两个 valarrays,或比较一个 valarray 和一个值
(函数模板)
应用函数 absvalarray 的每个元素
(函数模板)
指数函数
应用函数 std::exp 到 valarray 的每个元素
(函数模板)
应用函数 std::log 到 valarray 的每个元素
(函数模板)
应用函数 std::log10 到 valarray 的每个元素
(函数模板)
幂函数
应用函数 std::pow 到二个 valarray 或一个 valarray 与一个值
(函数模板)
应用函数 std::sqrt 到 valarray 的每个元素
(函数模板)
三角函数
应用函数 std::sinvalarray 的每个元素
(函数模板)
应用函数 std::cos 到 valarray 的每个元素
(函数模板)
应用函数 std::tan 到 valarray 的每个元素
(函数模板)
应用函数 std::asin 到 valarray 的每个元素
(函数模板)
应用函数 std::acos 到 valarray 的每个元素
(函数模板)
应用函数 std::atan 到 valarray 的每个元素
(函数模板)
应用函数 std::atan2 到一个 valarray 和一个值
(函数模板)
双曲函数
应用函数 std::sinhvalarray 的每个元素
(函数模板)
应用函数 std::coshvalarray 的每个元素
(函数模板)
应用函数 std::tanh 到 valarray 的每个元素
(函数模板)

辅助类

valarray 的 BLAS 式切片:起始下标、长度、跨度
(类)
valarray 应用切片后的子集的代理
(类模板)
valarray 的通用切片:起始下标、长度集、步幅集
(类)
valarray 应用 gslice 后的子集的代理
(类模板)
到应用布尔掩码 operator[] 后的 valarray 子集的代理
(类模板)
到应用间接 operator[] 后的 valarray 子集的代理。
(类模板)

推导指引(C++17 起)

注解

std::valarray 及帮助类定义为免除某些形式的别名使用,从而允许这些类上的操作被优化得类似 C 程序语言中关键词 restrict 的效果。而且,接收 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)
std::valarraybeginend 成员函数,及 iteratorconst_iterator 成员类型[1]
  1. 到 2026-05-27 为止,libstdc++ 尚未将来自 P3016R6 的函数增添删除视为针对 C++11 的缺陷报告,并且仅从 {nobr|C++26}} 起应用更改。

缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

缺陷报告 应用于 出版时的行为 正确行为
P3016R6 C++11 1) valarray 缺少成员类型 iteratorconst_iterator
2) valarray 有不一致的非成员 begin()end() 函数
1) 添加了成员类型
2) 改为成员函数

参阅

数据并行向量类型
(类模板)
(C++26)
可以指定宽度的 basic_vec 的便利别名模板
(别名模板)
元素类型为 bool 的数据并行类型
(类模板)
可以指定宽度的 basic_mask 的便利别名模板
(别名模板)