std::valarray<T>::operator=
Von cppreference.com
| 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 so neu dimensioniert, als ob durch resize(other.size()). Jedes Element von *this erhält den Wert des entsprechenden Elements von other zugewiesen.
2) Zuweisungsoperator für Verschiebung. Ersetzt den Inhalt von *this durch den von other. Der Wert von other ist nach dieser Operation undefiniert. Die Komplexität dieser Operation kann linear sein, wenn T nicht triviale Destruktoren hat, aber ist normalerweise ansonsten konstant.
3) Ersetzt jeden Wert in *this durch eine Kopie von val.
4-7) Ersetzt den Inhalt von *this durch das Ergebnis einer verallgemeinerten Subskriptionsoperation. 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).
Inhalt |
[bearbeiten] Parameter
| Sonstiges | - | ein weiteres numerisches Array (oder eine Maske) zum Zuweisen |
| val | - | der Wert, mit dem jedes Element initialisiert werden soll |
| il | - | Initialisierungsliste zum Zuweisen |
[bearbeiten] Rückgabewert
*this
[bearbeiten] Ausnahmen
1,3-8) Kann implementierungsdefinierte Ausnahmen auslösen.
[bearbeiten] Beispiel
Führen Sie diesen Code aus
#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
[bearbeiten] Fehlerberichte
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 624 | C++98 | die Verhaltensweisen der Überladungen (4-7) waren unklar, wenn die Länge von other nicht size() ist |
die Verhaltensweisen sind in diesem Fall nicht definiert. |
| LWG 630 | C++98 | das Verhalten des Kopierzuweisungsoperators war undefiniert, wenn size() != other.size() |
resizes *this zuerst in diesem Fall |
| LWG 2071 | C++11 | der Zuweisungsoperator für Verschiebung hat neu dimensioniert *this, wenn size() != other.size() |
nicht erforderlich war in diesem Fall neu zu dimensionieren |