std::valarray<T>::operator=

来自cppreference.com
< cpp‎ | numeric‎ | valarray
 
 
数值库
常用数学函数
数学特殊函数 (C++17)
数学常数 (C++20)
浮点环境 (C++11)
复数
数值数组
伪随机数生成
编译时有理数算术 (C++11)
数值算法
(C++17)
(C++17)
插值
(C++20)
(C++20)
通用数值运算
(C++11)
位操作
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
 
 
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 <valarray>
#include <iostream>
 
int main()
{
    std::valarray<int> v1(3);
    v1 = -1; // 从标量
    std::cout << "assigned from scalar: ";
    for(int n: v1) std::cout << n << ' '; std::cout << '\n';
 
    v1 = {1, 2, 3, 4, 5, 6}; // 从不同大小的 initializer_list
    std::cout << "assigned from initializer_list:      ";
    for(int n: v1) std::cout << n << ' '; std::cout << '\n';
 
    std::valarray<int> v2(3);
    v2 = v1[std::slice(0,3,2)]; // 从 slice_array
    std::cout << "every 2nd element starting at pos 0: ";
    for(int n: v2) std::cout << n << ' '; std::cout << '\n';
 
    v2 = v1[v1 % 2 == 0]; // from mask array
    std::cout << "values that are even          :      ";
    for(int n: v2) std::cout << n << ' '; std::cout << '\n';
 
    std::valarray<std::size_t> idx = {0,1,2,4}; // 下标数组
    v2.resize(4); // 从泛型下标赋值时大小必须匹配
    v2 = v1[idx]; // 从 indirect_array
    std::cout << "values at positions 0,1,2,4:         ";
    for(int n: v2) std::cout << n << ' '; std::cout << '\n';
}

输出:

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