Namensräume
Varianten
Aktionen

std::valarray<T>::operator=

Von cppreference.com
< cpp‎ | numeric‎ | valarray
 
 
 
 
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

#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