std::valarray<T>::operator=
Von de.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. Falls
size() != other.size(), wird *this zuerst wie durch resize(other.size()) vergrößert/verkleinert. Jedes Element von *this erhält den Wert des entsprechenden Elements von other.2) Verschiebezuweisungsoperator. Ersetzt den Inhalt von
*this durch den von other. Der Wert von other ist nach dieser Operation 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 generalisierten Indexoperation. 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. Äquivalent zu *this = valarray(il).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 |