std::valarray<T>:: operator=
From cppreference.net
|
valarray
<
T
>
&
operator
=
(
const
valarray
<
T
>
&
other
)
;
|
(1) | |
|
valarray
<
T
>
&
operator
=
(
valarray
<
T
>
&&
other
)
noexcept
;
|
(2) | (seit 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) | (seit C++11) |
Ersetzt den Inhalt des numerischen Arrays.
1)
Kopierzuweisungsoperator. Wenn
size
(
)
!
=
other.
size
(
)
, wird zuerst
*
this
wie durch
resize
(
other.
size
(
)
)
angepasst. Jedes Element von
*
this
wird dem Wert des entsprechenden Elements von
other
zugewiesen.
2)
Move-Zuweisungsoperator. Ersetzt den Inhalt von
*
this
durch den Inhalt von
other
. Der Wert von
other
ist nach diesem Vorgang nicht spezifiziert. Die Komplexität dieser Operation kann linear sein, wenn T nicht-triviale Destruktoren hat, ist aber normalerweise konstant.
3)
Ersetzt jeden Wert in
*
this
durch eine Kopie von
val
.
4-7)
Ersetzt den Inhalt von
*
this
durch das Ergebnis einer verallgemeinerten Indexierungsoperation. Das Verhalten ist undefiniert, wenn
size()
nicht der Länge von
other
entspricht oder wenn ein Wert auf der linken Seite vom Wert auf der rechten Seite abhängt (z.B.
v
=
v
[
v
>
2
]
).
8)
Weist den Inhalt der Initialisierungsliste
il
zu. Entspricht
*
this
=
valarray
(
il
)
.
Inhaltsverzeichnis |
Parameter
| other | - | ein weiteres numerisches Array (oder eine Maske) zum Zuweisen |
| val | - | der Wert, mit dem jedes Element initialisiert werden soll |
| il | - | Initialisierungsliste zum Zuweisen |
Rückgabewert
* this
Exceptions
1,3-8)
Kann implementierungsdefinierte Ausnahmen werfen.
Beispiel
Diesen Code ausführen
#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); }
Ausgabe:
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
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrektes Verhalten |
|---|---|---|---|
| LWG 624 | C++98 |
das Verhalten der Überladungen
(4-7)
war
unklar, wenn die Länge von other nicht
size()
entspricht
|
das Verhalten ist
in diesem Fall undefiniert |
| LWG 630 | C++98 |
das Verhalten des Kopierzuweisungsoperators
war undefiniert, wenn size ( ) ! = other. size ( ) |
ändert die Größe von
*
this
zuerst in diesem Fall |
| LWG 2071 | C++11 |
der Verschiebezuweisungsoperator änderte die Größe von
* this wenn size ( ) ! = other. size ( ) |
nicht erforderlich
die Größe in diesem Fall zu ändern |