std::valarray<T>::operator+=,-=,*=,/=,%=,&=,|=,<<=,>>=
来自cppreference.com
<tbody>
</tbody>
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, auto const& v, bool nl = false)
{
if constexpr (std::is_scalar_v<std::decay_t<decltype(v)>>)
std::cout << rem << " : " << v;
else
{
for (std::cout << rem << " : { "; auto const 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 的每个元素和一个值 (函数模板) |