# std::valarray<T>::operator=

< cpp‎ | numeric‎ | valarray

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) 复制赋值运算符。 `*this` 的每个元素被赋 `other` 的值。若 `other` 的长度不等于 `*this` 的长度，则行为未定义 (C++11 前)首先如通过 resize(other.size()) 重置大小 (C++11 起)。
2) 移动赋值运算符。以 `other` 的内容替换 `*this` 的内容。此操作后 `other` 的内容未指定。若 T 拥有非平凡构造函数则此操作的复杂度可能为线性，但否则通常为常数。
3) 以f `val` 的副本替换 `*this` 中的每个值。
4-7) 以泛型化下标运算的结果替换 `*this` 的内容。若参数的长度不等于 `*this` 的长度，或若任何左侧的值依赖右侧的值（例如 v=v[v>2] ），则行为未定义。
8) 赋值 `il` 的内容。等价于 *this = valarray(il) 。

### 参数

other | - | 要赋值的另一数值数组（或掩码）
val | - | 用以初始化每个元素的值
il | - | 要赋值的 initializer_list

### 返回值

*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("assigned from scalar: ", v1);

        v1 = {1, 2, 3, 4, 5, 6}; // (8) ：从不同大小的初始化器列表
        print("assigned from initializer_list:", v1);

        std::valarray<int> v2(3);
        v2 = v1[std::slice(0,3,2)]; // (4) ：从切片数组
        print("every 2nd element starting at pos 0:", v2);

        v2 = v1[v1 % 2 == 0]; // (6) ：从掩码数组
        print("values that are even:", v2);

        std::valarray<std::size_t> idx = {0,1,2,4}; // 下标数组
        v2.resize(4); // 从生成下标赋值时大小必须匹配
        v2 = v1[idx]; // (7) ：从间接数组
        print("values at positions 0, 1, 2, 4:", v2);
    }

输出：

    assigned from scalar:                -1 -1 -1
    assigned from initializer_list:       1  2  3  4  5  6
    every 2nd element starting at pos 0:  1  3  5
    values that are even:                 2  4  6
    values at positions 0, 1, 2, 4:       1  2  3  5