Namespaces
Variants

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 的副本。
4-7) * this 的内容替换为广义下标操作的结果。若 size() 不等于 other 的长度,或左侧任何值依赖于右侧值(例如 v = v [ v > 2 ] ),则行为未定义。
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 大小
此情况下不要求
调整大小