std::valarray
来自 cppreference.cn
定义于头文件 <valarray> |
||
template< class T > class valarray; |
||
std::valarray
是用于表示和操作值数组的类。它支持元素级的数学运算以及各种形式的广义下标运算符、切片和间接访问。
目录 |
[编辑] 注意
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。
[编辑] 模板参数
T | - | 元素类型。该类型必须满足 NumericType 要求 |
[编辑] 成员类型
成员类型 | 定义 |
value_type
|
T
|
[编辑] 成员函数
构造新的数值数组 (public member function) | |
销毁数值数组 (public member function) | |
赋值内容 (public member function) | |
获取/设置 valarray 元素、切片或掩码 (public member function) | |
对 valarray 的每个元素应用一元算术运算符 (public member function) | |
将复合赋值运算符应用于 valarray 的每个元素 (public member function) | |
与另一个 valarray 交换 (public member function) | |
返回 valarray 的大小 (public member function) | |
改变 valarray 的大小 (public member function) | |
计算所有元素的和 (public member function) | |
返回最小元素 (public member function) | |
返回最大元素 (public member function) | |
对 valarray 的元素进行零填充移位 (public member function) | |
对 valarray 的元素进行循环移位 (public member function) | |
将函数应用于 valarray 的每个元素 (public member function) |
[编辑] 非成员函数
(C++11) |
特化 std::swap 算法 (函数模板) |
(C++11) |
重载 std::begin (函数模板) |
(C++11) |
特化 std::end (函数模板) |
对两个 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 的广义切片:起始索引、长度集、步长集 (类) | |
应用 gslice 后 valarray 子集的代理 (类模板) | |
应用布尔掩码 operator[] 后 valarray 子集的代理(类模板) | |
应用间接 operator[] 后 valarray 子集的代理(类模板) |
[编辑] 推导指南(C++17 起)
[编辑] 参见
(C++26) |
basic_simd 的便利别名模板,可以指定其宽度(别名模板) |
(C++26) |
basic_simd_mask 的便利别名模板,可以指定其宽度(别名模板) |
(并行技术规范 v2) |
数据并行向量类型 (类模板) |
(并行技术规范 v2) |
元素类型为 bool 的数据并行类型 (类模板) |