Namensräume
Varianten
Aktionen

std::valarray<T>::operator+=,-=,*=,/=,%=,&=,|=,<<=,>>=

Von cppreference.com
< cpp‎ | numeric‎ | valarray
 
 
 
 
valarray<T>& operator+=( const valarray<T>& v );

valarray<T>& operator-=( const valarray<T>& v );
valarray<T>& operator*=( const valarray<T>& v );
valarray<T>& operator/=( const valarray<T>& v );
valarray<T>& operator%=( const valarray<T>& v );
valarray<T>& operator&=( const valarray<T>& v );
valarray<T>& operator|=( const valarray<T>& v );
valarray<T>& operator^=( const valarray<T>& v );
valarray<T>& operator<<=( const valarray<T>& v );

valarray<T>& operator>>=( const valarray<T>& v );
(1)
valarray<T>& operator+=( const T& val );

valarray<T>& operator-=( const T& val );
valarray<T>& operator*=( const T& val );
valarray<T>& operator/=( const T& val );
valarray<T>& operator%=( const T& val );
valarray<T>& operator&=( const T& val );
valarray<T>& operator|=( const T& val );
valarray<T>& operator^=( const T& val );
valarray<T>& operator<<=( const T& val );

valarray<T>& operator>>=( const T& val );
(2)

Wendet zusammengesetzte Zuweisungsoperatoren auf jedes Element im numerischen Array an.

1) Jedem Element wird der Wert zugewiesen, der durch Anwendung des entsprechenden Operators auf den vorherigen Wert des Elements und das entsprechende Element aus v erhalten wird.
Das Verhalten ist undefiniert, wenn size() != v.size().
Das Verhalten ist undefiniert, wenn einer der Werte in v während der Zuweisung berechnet wird und von einem der Werte in *this abhängt, d.h. der Ausdruck auf der rechten Seite der Zuweisung bezieht sich auf eine Variable auf der linken Seite der Zuweisung.
2) Jedem Element wird der Wert zugewiesen, der durch Anwendung des entsprechenden Operators auf den vorherigen Wert des Elements und den Wert von val erhalten wird.

Inhalt

[bearbeiten] Parameter

v - anderes numerisches Array
val - ein Wert

[bearbeiten] Rückgabewert

*this

[edit] Exceptions

Kann implementierungsdefinierte Ausnahmen auslösen.

[bearbeiten] Hinweise

Jeder der Operatoren kann nur instanziiert werden, wenn die folgenden Anforderungen erfüllt sind:

  • Der angegebene Operator kann auf den Typ T angewendet werden.
  • Der Ergebniswert kann eindeutig nach T konvertiert werden.

[bearbeiten] Beispiel

#include <iostream>
#include <string_view>
#include <type_traits>
#include <valarray>
 
void o(std::string_view rem, auto const& v, bool nl = false)
{
    if constexpr (std::is_scalar_v<std::decay_t<decltype(v)>>)
        std::cout << rem << " : " << v;
    else
    {
        for (std::cout << rem << " : { "; auto const e : v)
            std::cout << e << ' ';
        std::cout << '}';
    }
    std::cout << (nl ? "\n" : ";  ");
}
 
int main()
{
    std::valarray<int> x, y;
 
    o("x", x = {1, 2, 3, 4}), o("y", y = {4, 3, 2, 1}), o("x += y", x += y, 1);
    o("x", x = {4, 3, 2, 1}), o("y", y = {3, 2, 1, 0}), o("x -= y", x -= y, 1);
    o("x", x = {1, 2, 3, 4}), o("y", y = {5, 4, 3, 2}), o("x *= y", x *= y, 1);
    o("x", x = {1, 3, 4, 7}), o("y", y = {1, 1, 3, 5}), o("x &= y", x &= y, 1);
    o("x", x = {0, 1, 2, 4}), o("y", y = {4, 3, 2, 1}), o("x <<=y", x <<=y, 1);
 
    std::cout << '\n';
 
    o("x", x = {1, 2, 3, 4}), o("x += 5", x += 5, 1);
    o("x", x = {1, 2, 3, 4}), o("x *= 2", x *= 2, 1);
    o("x", x = {8, 6, 4, 2}), o("x /= 2", x /= 2, 1);
    o("x", x = {8, 4, 2, 1}), o("x >>=1", x >>=1, 1);
}

Ausgabe

x : { 1 2 3 4 };  y : { 4 3 2 1 };  x += y : { 5 5 5 5 }
x : { 4 3 2 1 };  y : { 3 2 1 0 };  x -= y : { 1 1 1 1 }
x : { 1 2 3 4 };  y : { 5 4 3 2 };  x *= y : { 5 8 9 8 }
x : { 1 3 4 7 };  y : { 1 1 3 5 };  x &= y : { 1 1 0 5 }
x : { 0 1 2 4 };  y : { 4 3 2 1 };  x <<=y : { 0 8 8 8 }
 
x : { 1 2 3 4 };  x += 5 : { 6 7 8 9 }
x : { 1 2 3 4 };  x *= 2 : { 2 4 6 8 }
x : { 8 6 4 2 };  x /= 2 : { 4 3 2 1 }
x : { 8 4 2 1 };  x >>=1 : { 4 2 1 0 }

[bearbeiten] Siehe auch

wendet einen unären arithmetischen Operator auf jedes Element des Valarrays an
(public member function) [edit]
wendet binäre Operatoren auf jedes Element zweier Valarrays oder eines Valarrays und eines Werts an
(function template) [edit]