Namespaces
Variants

operator+, -, *, /, %, &, |, ^, <<, >>, &&, || (std::valarray)

Von de.cppreference.net
 
 
 
 
Definiert in Header <valarray>
template< class T >
std::valarray<T> operator+ ( const std::valarray<T>& lhs, const std::valarray<T>& rhs );
template< class T >
std::valarray<T> operator- ( const std::valarray<T>& lhs, const std::valarray<T>& rhs );
template< class T >
std::valarray<T> operator* ( const std::valarray<T>& lhs, const std::valarray<T>& rhs );
template< class T >
std::valarray<T> operator/ ( const std::valarray<T>& lhs, const std::valarray<T>& rhs );
template< class T >
std::valarray<T> operator% ( const std::valarray<T>& lhs, const std::valarray<T>& rhs );
template< class T >
std::valarray<T> operator& ( const std::valarray<T>& lhs, const std::valarray<T>& rhs );
template< class T >
std::valarray<T> operator| ( const std::valarray<T>& lhs, const std::valarray<T>& rhs );
template< class T >
std::valarray<T> operator^ ( const std::valarray<T>& lhs, const std::valarray<T>& rhs );
template< class T >
std::valarray<T> operator<<( const std::valarray<T>& lhs, const std::valarray<T>& rhs );
template< class T >
std::valarray<T> operator>>( const std::valarray<T>& lhs, const std::valarray<T>& rhs );
template< class T >
std::valarray<bool> operator&&( const std::valarray<T>& lhs, const std::valarray<T>& rhs );
template< class T >
std::valarray<bool> operator||( const std::valarray<T>& lhs, const std::valarray<T>& rhs );
(1)
template< class T >
std::valarray<T> operator+ ( const typename std::valarray<T>::value_type & val,
                             const std::valarray<T>& rhs );
template< class T >
std::valarray<T> operator- ( const typename std::valarray<T>::value_type & val,
                             const std::valarray<T>& rhs );
template< class T >
std::valarray<T> operator* ( const typename std::valarray<T>::value_type & val,
                             const std::valarray<T>& rhs );
template< class T >
std::valarray<T> operator/ ( const typename std::valarray<T>::value_type & val,
                             const std::valarray<T>& rhs );
template< class T >
std::valarray<T> operator% ( const typename std::valarray<T>::value_type & val,
                             const std::valarray<T>& rhs );
template< class T >
std::valarray<T> operator& ( const typename std::valarray<T>::value_type & val,
                             const std::valarray<T>& rhs );
template< class T >
std::valarray<T> operator| ( const typename std::valarray<T>::value_type & val,
                             const std::valarray<T>& rhs );
template< class T >
std::valarray<T> operator^ ( const typename std::valarray<T>::value_type & val,
                             const std::valarray<T>& rhs );
template< class T >
std::valarray<T> operator<<( const typename std::valarray<T>::value_type & val,
                             const std::valarray<T>& rhs );
template< class T >
std::valarray<T> operator>>( const typename std::valarray<T>::value_type & val,
                             const std::valarray<T>& rhs );
template< class T >
std::valarray<bool> operator&&( const typename std::valarray<T>::value_type & val,
                                const std::valarray<T>& rhs );
template< class T >
std::valarray<bool> operator||( const typename std::valarray<T>::value_type & val,
                                const std::valarray<T>& rhs );
(2)
template< class T >
std::valarray<T> operator+ ( const std::valarray<T>& lhs,
                             const typename std::valarray<T>::value_type & val );
template< class T >
std::valarray<T> operator- ( const std::valarray<T>& lhs,
                             const typename std::valarray<T>::value_type & val );
template< class T >
std::valarray<T> operator* ( const std::valarray<T>& lhs,
                             const typename std::valarray<T>::value_type & val );
template< class T >
std::valarray<T> operator/ ( const std::valarray<T>& lhs,
                             const typename std::valarray<T>::value_type & val );
template< class T >
std::valarray<T> operator% ( const std::valarray<T>& lhs,
                             const typename std::valarray<T>::value_type & val );
template< class T >
std::valarray<T> operator& ( const std::valarray<T>& lhs,
                             const typename std::valarray<T>::value_type & val );
template< class T >
std::valarray<T> operator| ( const std::valarray<T>& lhs,
                             const typename std::valarray<T>::value_type & val );
template< class T >
std::valarray<T> operator^ ( const std::valarray<T>& lhs,
                             const typename std::valarray<T>::value_type & val );
template< class T >
std::valarray<T> operator<<( const std::valarray<T>& lhs,
                             const typename std::valarray<T>::value_type & val );
template< class T >
std::valarray<T> operator>>( const std::valarray<T>& lhs,
                             const typename std::valarray<T>::value_type & val );
template< class T >
std::valarray<bool> operator&&( const std::valarray<T>& lhs,
                                const typename std::valarray<T>::value_type & val );
template< class T >
std::valarray<bool> operator||( const std::valarray<T>& lhs,
                                const typename std::valarray<T>::value_type & val );
(3)

Wendet binäre Operatoren auf jedes Element von zwei Valarrays oder ein Valarray und einen Wert an.

1) Die Operatoren arbeiten auf Valarrays gleicher Größe und geben ein Valarray mit derselben Größe wie die Parameter zurück, wobei die Operation auf jedes Element der beiden Argumente angewendet wird.
2,3) Wendet den Operator zwischen jedem Element des Valarrays und dem Skalar an.

Parameter

rhs - ein numerisches Array
lhs - ein numerisches Array
val - ein Wert vom Typ T

Rückgabewert

Ein valarray mit derselben Größe wie der Parameter.

Hinweis

Das Verhalten ist undefiniert, wenn die beiden Argumente Valarrays unterschiedlicher Größe sind.

Die Funktion kann mit einem Rückgabetyp implementiert werden, der von std::valarray. In diesem Fall hat der Ersatztyp die folgenden Eigenschaften:

  • Alle const Elementfunktionen von std::valarray werden bereitgestellt.
  • std::valarray, std::slice_array, std::gslice_array, std::mask_array und std::indirect_array können aus dem Ersatztyp konstruiert werden.
  • Für jede Funktion, die ein const std::valarray<T>& außer begin() und end()(seit C++11), müssen identische Funktionen, die die Ersatztypen annehmen, hinzugefügt werden;
  • Für jede Funktion, die zwei const std::valarray<T>& Argumente annimmt, müssen identische Funktionen, die jede Kombination von const std::valarray<T>& und Ersatztypen annehmen, hinzugefügt werden.
  • Der Rückgabetyp fügt nicht mehr als zwei Ebenen der Template-Verschachtelung über dem am tiefsten verschachtelten Argumenttyp hinzu.

Beispiel

Findet reelle Wurzeln mehrerer Quadratischer Gleichungen .

#include <cstddef>
#include <iostream>
#include <valarray>
int main()
{
    std::valarray<double> a(1, 8);
    std::valarray<double> b{1, 2, 3, 4, 5, 6, 7, 8};
    std::valarray<double> c = -b;
    // literals must also be of type T until LWG3074 (double in this case)
    std::valarray<double> d = std::sqrt(b * b - 4.0 * a * c);
    std::valarray<double> x1 = 2.0 * c / (-b + d);
    std::valarray<double> x2 = 2.0 * c / (-b - d);
    std::cout << "quadratic equation:  root 1:    root 2:   b: c:\n";
    for (std::size_t i = 0; i < a.size(); ++i)
        std::cout << a[i] << "\u00B7x\u00B2 + " << b[i] << "\u00B7x + "
                  << c[i] << " = 0  " << std::fixed << x1[i]
                  << "  " << x2[i] << std::defaultfloat
                  << "  " << -x1[i] - x2[i]
                  << "  " << x1[i] * x2[i] << '\n';
}

Ausgabe:

quadratic equation:  root 1:    root 2:   b: c:
1·x² + 1·x + -1 = 0  -1.618034  0.618034  1  -1
1·x² + 2·x + -2 = 0  -2.732051  0.732051  2  -2
1·x² + 3·x + -3 = 0  -3.791288  0.791288  3  -3
1·x² + 4·x + -4 = 0  -4.828427  0.828427  4  -4
1·x² + 5·x + -5 = 0  -5.854102  0.854102  5  -5
1·x² + 6·x + -6 = 0  -6.872983  0.872983  6  -6
1·x² + 7·x + -7 = 0  -7.887482  0.887482  7  -7
1·x² + 8·x + -8 = 0  -8.898979  0.898979  8  -8

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 3074 C++98 T wird sowohl vom Skalar als auch vom valarray für (2,3) abgeleitet, was gemischte Typaufrufe verbietet Leite T nur vom valarray ab

Siehe auch

wendet einen unären arithmetischen Operator auf jedes Element des valarray an
(öffentliche Elementfunktion)
wendet einen zusammengesetzten Zuweisungsoperator auf jedes Element des valarray an
(öffentliche Elementfunktion)