operator+,-,*,/,%,&,|,^,<<,>>,&&,|| (std::valarray)
|
定义于头文件
<valarray>
|
||
|
template
<
class
T
>
std::
valarray
<
T
>
operator
+
(
const
std::
valarray
<
T
>
&
lhs,
const
std::
valarray
<
T
>
&
rhs
)
;
|
(1) | |
|
template
<
class
T
>
std::
valarray
<
T
>
operator
+
(
const
typename
std::
valarray
<
T
>
::
value_type
&
val,
|
对两个 valarray 的每个元素,或一个 valarray 与一个值应用二元运算符。
目录 |
参数
| rhs | - | 数值数组 |
| lhs | - | 数值数组 |
| val | - |
类型为
T
的值
|
返回值
一个与参数大小相同的 valarray。
注释
当两个参数是大小不同的 valarray 时,行为未定义。
该函数可以实现为返回类型不同于 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 > & 与替换类型所有组合的相同函数。
- 返回类型的模板嵌套层级不会超过最深嵌套参数类型的两个层级。
示例
求解多个 二次方程 的实根。
#include <cstddef> #include <iostream> #include <valarray> int main() { std::valarray<double> a(1, 8); std::valarray<double> b{1, 2, 3, 4, 5, 6, 7, 8}; std::valarray<double> c = -b; // 在 LWG3074 之前,字面量也必须是 T 类型(此处为 double) std::valarray<double> d = std::sqrt(b * b - 4.0 * a * c); std::valarray<double> x1 = 2.0 * c / (-b + d); std::valarray<double> x2 = 2.0 * c / (-b - d); std::cout << "quadratic equation: root 1: root 2: b: c:\n"; for (std::size_t i = 0; i < a.size(); ++i) std::cout << a[i] << "\u00B7x\u00B2 + " << b[i] << "\u00B7x + " << c[i] << " = 0 " << std::fixed << x1[i] << " " << x2[i] << std::defaultfloat << " " << -x1[i] - x2[i] << " " << x1[i] * x2[i] << '\n'; }
输出:
quadratic equation: root 1: root 2: b: c: 1·x² + 1·x + -1 = 0 -1.618034 0.618034 1 -1 1·x² + 2·x + -2 = 0 -2.732051 0.732051 2 -2 1·x² + 3·x + -3 = 0 -3.791288 0.791288 3 -3 1·x² + 4·x + -4 = 0 -4.828427 0.828427 4 -4 1·x² + 5·x + -5 = 0 -5.854102 0.854102 5 -5 1·x² + 6·x + -6 = 0 -6.872983 0.872983 6 -6 1·x² + 7·x + -7 = 0 -7.887482 0.887482 7 -7 1·x² + 8·x + -8 = 0 -8.898979 0.898979 8 -8
缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的C++标准。
| 缺陷报告 | 适用范围 | 发布时行为 | 正确行为 |
|---|---|---|---|
| LWG 3074 | C++98 |
T
同时从标量和
valarray
推导
(2,3)
,不允许混合类型调用
|
仅从
valarray
推导
T
|
参见
|
对 valarray 的每个元素应用一元算术运算符
(公开成员函数) |
|
|
对 valarray 的每个元素应用复合赋值运算符
(公开成员函数) |