operator+,-,*,/,%,&,|,^,<<,>>,&&,|| (std::valarray)
|
Definiert in Header
<valarray>
|
||
|
template
<
class
T
>
std::
valarray
<
T
>
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,
|
(2) | |
|
template
<
class
T
>
std::
valarray
<
T
>
operator
+
(
const
std::
valarray
<
T
>
&
lhs,
|
(3) | |
Wende binäre Operatoren auf jedes Element zweier valarrays oder eines valarrays und eines Wertes an.
Inhaltsverzeichnis |
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 mit unterschiedlichen Größen sind.
Die Funktion kann mit einem Rückgabetyp implementiert werden, der sich von std::valarray unterscheidet. In diesem Fall hat der Ersatztyp die folgenden Eigenschaften:
-
- Alle const Memberfunktionen 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) akzeptiert, sollen identische Funktionen hinzugefügt werden, die die Ersatztypen akzeptieren;
- Für jede Funktion, die zwei const std:: valarray < T > & Argumente akzeptiert, sollen identische Funktionen hinzugefügt werden, die jede Kombination von const std:: valarray < T > & und Ersatztypen akzeptieren.
- Der Rückgabetyp fügt nicht mehr als zwei Ebenen von 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) |