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
(
)
の場合、まず
*
this
を
resize
(
other.
size
(
)
)
によってリサイズする。
*
this
の各要素は、
other
の対応する要素の値が代入される。
2)
ムーブ代入演算子。
*
this
の内容を
other
の内容で置き換えます。この操作後、
other
の値は未規定となります。この操作の計算量は、Tが非自明なデストラクタを持つ場合は線形になる可能性がありますが、それ以外の場合は通常定数時間です。
3)
*
this
内の各値を
val
のコピーで置き換えます。
4-7)
このオブジェクトの内容を、一般化された添字操作の結果で置き換えます。
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("初期化子リストからの代入:", 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 初期化子リストからの代入: 1 2 3 4 5 6 位置0から始まる2つおきの要素: 1 3 5 偶数の値: 2 4 6 位置0, 1, 2, 4の値: 1 2 3 5
不具合報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 624 | C++98 |
オーバーロード
(4-7)
の動作は、
other の長さが
size()
でない場合に不明確
|
この場合の動作は
未定義 |
| LWG 630 | C++98 |
コピー代入演算子の動作は、
size ( ) ! = other. size ( ) の場合に未定義 |
この場合、
*
this
を
最初にリサイズ |
| LWG 2071 | C++11 |
ムーブ代入演算子は
size ( ) ! = other. size ( ) の場合に * this をリサイズ |
この場合のリサイズは
必須ではない |