Inhaltsverzeichnis

transform_reduce()

#include <numeric>

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) 

Bildet die "Summe" vom (optionalen) startwert mit den Ergebnissen der Funktion f für alle Werte des Bereiches [first, last)

 startwert  + f(x1)  + f(x2)  + (x3)  + ... ---> Ergebnis

bzw. das "Skalarprodukt" der Folgenwerte [first, last) und [first2,…) zuzüglich startwert. Die Reihenfolge der "Additionen" op ist nicht festgelegt.

           x1   x2   x3   x4  ...  xn
           | y1 | y2 | y3 | y4  ...| yn
           \ /  \ /  \ /  \ /      \ /
            *    *    *    *        * 
            |    |    |    |        |
            v    v    v    v        v 
startwert-> + -> + -> + -> + -> ... + -> Ergebnis   

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 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(), Funktionsadapter.

Beispiel

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';
}