Namespaces
Variants

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

#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