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,
|
(2) | |
|
template
<
class
T
>
std::
valarray
<
T
>
operator
+
(
const
std::
valarray
<
T
>
&
lhs,
|
(3) | |
对两个 valarray 的每个元素,或一个 valarray 与一个值应用二元运算符。
目录 |
参数
| rhs | - | 数值数组 |
| lhs | - | 数值数组 |
| val | - |
类型为
T
的值
|
返回值
一个与参数大小相同的 valarray。
注意
当两个参数是大小不同的 valarray 时,行为是未定义的。
该函数的实现可以具有不同于 std::valarray 的返回类型。在这种情况下,替换类型需具备以下特性:
-
- 提供了 const 的所有成员函数。
- 可以从替换类型构造 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; // literals must also be of type T until LWG3074 (double in this case) 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++ 标准。
| DR | 适用版本 | 发布行为 | 正确行为 |
|---|---|---|---|
| LWG 3074 | C++98 |
T
同时从标量和
valarray
推导
(2,3)
,不允许混合类型调用
|
仅从
valarray
推导
T
|
另请参阅
|
对 valarray 的每个元素应用一元算术运算符
(公开成员函数) |
|
|
对 valarray 的每个元素应用复合赋值运算符
(公开成员函数) |