std::valarray<T>::operator+=,-=,*=,/=,%=,&=,|=,<<=,>>=

来自cppreference.com
< cpp‎ | numeric‎ | valarray
 
 
 
 
valarray<T>& operator+=(const valarray<T>& v );

valarray<T>& operator-=(const valarray<T>& v );
valarray<T>& operator*=(const valarray<T>& v );
valarray<T>& operator/=(const valarray<T>& v );
valarray<T>& operator%=(const valarray<T>& v );
valarray<T>& operator&=(const valarray<T>& v );
valarray<T>& operator|=(const valarray<T>& v );
valarray<T>& operator^=(const valarray<T>& v );
valarray<T>& operator<<=(const valarray<T>& v );

valarray<T>& operator>>=(const valarray<T>& v );
(1)
valarray<T>& operator+=(const T& val );

valarray<T>& operator-=(const T& val );
valarray<T>& operator*=(const T& val );
valarray<T>& operator/=(const T& val );
valarray<T>& operator%=(const T& val );
valarray<T>& operator&=(const T& val );
valarray<T>& operator|=(const T& val );
valarray<T>& operator^=(const T& val );
valarray<T>& operator<<=(const T& val );

valarray<T>& operator>>=(const T& val );
(2)

应用复合赋值运算符到数值数组中的每个元素。

1) 以对每个元素的先前值和来自 v 的对应元素应用对应运算符所获得的值,赋值给每个元素。
size()!= v.size() 则行为未定义。
v 中的任何值在赋值过程中计算并依赖任何 *this 中的值,即赋值右侧的表达式引用了赋值左侧的变量,则行为未定义。
2) 以对每个元素的先前值和 val 的值应用对应运算符所获得的值,赋值给每个元素。

目录

[编辑]参数

v - 另一个数值数组
val - 一个值

[编辑]返回值

*this

[编辑]异常

可能会抛出由实现定义的异常。

[编辑]注解

仅若满足下列条件,才能实例化各个运算符:

  • 所指示的运算符可应用于类型 T
  • 返回值可以无歧义地转换为 T

[编辑]示例

#include <iostream>#include <string_view>#include <type_traits>#include <valarray>   void o(std::string_view rem, autoconst& v, bool nl =false){ifconstexpr(std::is_scalar_v<std::decay_t<decltype(v)>>)std::cout<< rem <<" : "<< v;else{for(std::cout<< rem <<" : { ";autoconst e : v)std::cout<< e <<' ';std::cout<<'}';}std::cout<<(nl ?"\n":"; ");}   int main(){std::valarray<int> x, y;   o("x", x ={1, 2, 3, 4}), o("y", y ={4, 3, 2, 1}), o("x += y", x += y, 1); o("x", x ={4, 3, 2, 1}), o("y", y ={3, 2, 1, 0}), o("x -= y", x -= y, 1); o("x", x ={1, 2, 3, 4}), o("y", y ={5, 4, 3, 2}), o("x *= y", x *= y, 1); o("x", x ={1, 3, 4, 7}), o("y", y ={1, 1, 3, 5}), o("x &= y", x &= y, 1); o("x", x ={0, 1, 2, 4}), o("y", y ={4, 3, 2, 1}), o("x <<=y", x <<=y, 1);   std::cout<<'\n';   o("x", x ={1, 2, 3, 4}), o("x += 5", x +=5, 1); o("x", x ={1, 2, 3, 4}), o("x *= 2", x *=2, 1); o("x", x ={8, 6, 4, 2}), o("x /= 2", x /=2, 1); o("x", x ={8, 4, 2, 1}), o("x >>=1", x >>=1, 1);}

输出:

x : { 1 2 3 4 }; y : { 4 3 2 1 }; x += y : { 5 5 5 5 } x : { 4 3 2 1 }; y : { 3 2 1 0 }; x -= y : { 1 1 1 1 } x : { 1 2 3 4 }; y : { 5 4 3 2 }; x *= y : { 5 8 9 8 } x : { 1 3 4 7 }; y : { 1 1 3 5 }; x &= y : { 1 1 0 5 } x : { 0 1 2 4 }; y : { 4 3 2 1 }; x <<=y : { 0 8 8 8 }   x : { 1 2 3 4 }; x += 5 : { 6 7 8 9 } x : { 1 2 3 4 }; x *= 2 : { 2 4 6 8 } x : { 8 6 4 2 }; x /= 2 : { 4 3 2 1 } x : { 8 4 2 1 }; x >>=1 : { 4 2 1 0 }

[编辑]参阅

对 valarray 的每个元素运用一元算术运算符
(公开成员函数)[编辑]
应用二元运算符到两个 valarray 的每个元素,或一个 valarray 的每个元素和一个值
(函数模板)[编辑]
close