namespace cpp {}

C++ lernen, kennen, anwenden

Benutzer-Werkzeuge

Webseiten-Werkzeuge


kennen:lib:transform_reduce

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.


kennen:lib:transform_reduce [2021-07-31 11:53] (aktuell) – angelegt - Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
 +====== transform_reduce() ======
 +''#include'' [[..:include:numeric]]
 +
 +<code cpp>
 +T transform_reduce (In first, In last, T startwert, Binary op, Unary f) 
 +T transform_reduce (In first, In last, In first2, T startwert) 
 +T transform_reduce (In first, In last, In first2, T startwert, Binary op, Binary op2) 
 +
 +T transform_reduce (Exec pol, In first, In last, T startwert, Binary op, Unary f) 
 +T transform_reduce (Exec pol, In first, In last, In first2, T startwert) 
 +T transform_reduce (Exec pol, In first, In last, In first2, T startwert, Binary op, Binary op2) 
 +</code>
 + Bildet die "Summe" vom (optionalen) ''startwert'' 
 + mit den Ergebnissen der Funktion f für alle Werte des Bereiches [first, last) 
 +<code cpp>
 + startwert  + f(x1)  + f(x2)  + (x3)  + ... ---> Ergebnis
 +</code>
 + bzw. 
 + das "Skalarprodukt" der Folgenwerte [first, last) und [first2,...)
 + zuzüglich ''startwert''.
 + Die Reihenfolge der "Additionen" ''op'' ist nicht festgelegt.
 +
 +<code cpp>
 +           x1   x2   x3   x4  ...  xn
 +           | y1 | y2 | y3 | y4  ...| yn
 +           \ /  \ /  \ /  \ /      \ /
 +            *    *    *    *        * 
 +            |    |    |    |        |
 +            v    v    v    v        v 
 +startwert-> + -> + -> + -> + -> ... + -> Ergebnis   
 +</code>
 +==== Parameter ====
 +| ''first''  | Anfang eines Bereiches |
 +| ''last''   | Ende eines Bereiches |
 +| ''first2'' | Anfang des zweiten Bereiches |
 +| ''startwert''    | Anfangswert der Berechnung |
 +| ''op1''    | äußere Operation ("verallgemeinerte" Summe)|
 +| ''op2''    | innere Operation ("verallgemeinertes" Produkt)|
 +| ''f''    | einstellige, innere Operation |
 +| ''pol''   | [[..:include:execution|parallele Ausführungsart]] |
 +==== Ergebnis ====
 +Rückgabewert: Summe von ''startwert'' und der transformierten Werte bzw. "verallgemeinerte Summe",
 +bei leerem Bereich der ''startwert''.
 +
 +==== Siehe auch ====
 +[[inner_product]],
 +[[reduce]],
 +[[transform]],
 +[[..:stl#Funktionsadapter]].
 +
 +==== Beispiel ====
 +<code cpp transform_reduce.cpp>
 +#include <iostream>
 +#include <numeric>
 +#include <vector>
 +
 +int main()
 +{
 +  auto v1 = std::vector{1.0, 2.0, 3.0};
 +  auto v2 = std::vector{2.0, 3.0, 4.0};
 +
 +  auto result1 = std::transform_reduce(begin(v1), end(v1), 100.0, std::plus{}, [](auto x){ return x*x; });
 +  std::cout << result1 << '\n';
 +
 +  auto result2 = std::transform_reduce(begin(v1), end(v1), begin(v2), 100.0);
 +  std::cout << result2 << '\n';
 +
 +  auto result3 = std::transform_reduce(begin(v1), end(v1), begin(v2),  100.0, std::plus{}, std::multiplies{});
 +  std::cout << result3 << '\n';
 +}
 +</code>
  

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki