名稱空間
變體
操作

std::valarray<T>::operator=

來自 cppreference.com
< 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) 複製賦值運算子。如果 size() != other.size(),首先像透過 resize(other.size()) 那樣調整 *this 的大小。將 *this 的每個元素賦值為 other 相應元素的值。
2) 移動賦值運算子。用 other 的內容替換 *this 的內容。操作後 other 的值未指定。如果 T 具有非平凡解構函式,此操作的複雜度可能是線性的,否則通常為常數。
3)val 的副本替換 *this 中的每個值。
4-7) 用廣義下標操作的結果替換 *this 的內容。如果 size() 不等於 other 的長度,或者如果左側的任何值依賴於右側的值(例如 v = v[v > 2]),則行為未定義。
8) 賦值初始化列表 il 的內容。等價於 *this = valarray(il)

目錄

[編輯] 引數

其他 - 要賦值的另一個數值陣列(或掩碼)
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) from a scalar 
    print("assigned from scalar: ", v1);
 
    v1 = {1, 2, 3, 4, 5, 6}; // (8): from initializer list of different size
    print("assigned from initializer_list:", v1);
 
    std::valarray<int> v2(3);
    v2 = v1[std::slice(0, 3, 2)]; // (4): from slice array
    print("every 2nd element starting at pos 0:", v2);
 
    v2 = v1[v1 % 2 == 0]; // (6): from mask array
    print("values that are even:", v2);
 
    std::valarray<std::size_t> idx = {0, 1, 2, 4}; // index array
    v2.resize(4); // sizes must match when assigning from gen subscript
    v2 = v1[idx]; // (7): from indirect array
    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

[編輯] 缺陷報告

下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。

缺陷報告 應用於 釋出時的行為 正確的行為
LWG 624 C++98 過載 (4-7) 的行為在以下情況下
如果 other 的長度不等於 size(),則不清楚
行為是
未定義的
LWG 630 C++98 複製賦值運算子的行為在以下情況下
如果 size() != other.size(),則未定義
調整 *this 的大小
在此情況下優先
LWG 2071 C++11 移動賦值運算子在以下情況下調整
*this 的大小,如果 size() != other.size()
不要求
在此情況下調整大小