std::valarray<T>:: operator=
From cppreference.net
|
valarray
<
T
>
&
operator
=
(
const
valarray
<
T
>
&
other
)
;
|
(1) | |
|
valarray
<
T
>
&
operator
=
(
valarray
<
T
>
&&
other
)
noexcept
;
|
(2) | (自 C++11 起) |
|
valarray
<
T
>
&
operator
=
(
const
T
&
val
)
;
|
(3) | |
|
valarray
<
T
>
&
operator
=
(
const
std::
slice_array
<
T
>
&
other
)
;
|
(4) | |
|
valarray
<
T
>
&
operator
=
(
const
std::
gslice_array
<
T
>
&
other
)
;
|
(5) | |
|
valarray
<
T
>
&
operator
=
(
const
std::
mask_array
<
T
>
&
other
)
;
|
(6) | |
|
valarray
<
T
>
&
operator
=
(
const
std::
indirect_array
<
T
>
&
other
)
;
|
(7) | |
|
valarray
<
T
>
&
operator
=
(
std::
initializer_list
<
T
>
il
)
;
|
(8) | (自 C++11 起) |
替换数值数组的内容。
1)
复制赋值运算符。若
size
(
)
!
=
other.
size
(
)
,首先通过
resize
(
other.
size
(
)
)
调整
*
this
的大小。随后将
other
中每个元素的值赋给
*
this
的对应元素。
2)
移动赋值运算符。将
*
this
的内容替换为
other
的内容。此操作后
other
的值处于未指定状态。若 T 具有非平凡析构函数,此操作的复杂度可能为线性,否则通常为常数复杂度。
3)
将
*
this
中的每个值替换为
val
的副本。
8)
将初始化列表
il
的内容进行赋值。等价于
*
this
=
valarray
(
il
)
。
目录 |
参数
| other | - | 用于赋值的另一个数值数组(或掩码) |
| val | - | 用于初始化每个元素的值 |
| il | - | 用于赋值的初始化列表 |
返回值
* this
异常
1,3-8)
可能抛出由实现定义的异常。
示例
运行此代码
#include <iomanip> #include <iostream> #include <valarray> void print(const char* rem, const std::valarray<int>& v) { std::cout << std::left << std::setw(36) << rem << std::right; for (int n : v) std::cout << std::setw(3) << n; std::cout << '\n'; } int main() { std::valarray<int> v1(3); v1 = -1; // (3) 从标量赋值 print("从标量赋值: ", v1); v1 = {1, 2, 3, 4, 5, 6}; // (8): 从不同大小的初始化列表赋值 print("从initializer_list赋值:", v1); std::valarray<int> v2(3); v2 = v1[std::slice(0, 3, 2)]; // (4): 从切片数组赋值 print("从位置0开始的每第2个元素:", v2); v2 = v1[v1 % 2 == 0]; // (6): 从掩码数组赋值 print("偶数值:", v2); std::valarray<std::size_t> idx = {0, 1, 2, 4}; // 索引数组 v2.resize(4); // 从通用下标赋值时大小必须匹配 v2 = v1[idx]; // (7): 从间接数组赋值 print("位置0、1、2、4处的值:", v2); }
输出:
从标量赋值: -1 -1 -1 从initializer_list赋值: 1 2 3 4 5 6 从位置0开始的每第2个元素: 1 3 5 偶数值: 2 4 6 位置0、1、2、4处的值: 1 2 3 5
缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的C++标准。
| 缺陷报告 | 应用于 | 发布时行为 | 正确行为 |
|---|---|---|---|
| LWG 624 | C++98 |
当
other
的长度不等于
size()
时
重载 (4-7) 的行为不明确 |
此情况下行为
未定义 |
| LWG 630 | C++98 |
当
size
(
)
!
=
other.
size
(
)
时
拷贝赋值运算符行为未定义 |
此情况下先调整
* this 的大小 |
| LWG 2071 | C++11 |
当
size
(
)
!
=
other.
size
(
)
时
移动赋值运算符会调整 * this 大小 |
此情况下不要求
调整大小 |