====== Algorytm partial_sum ======
Zadaniem algorytmu jest liczenie sum częściowych.
Innymi słowy liczy on sumę wszystkich elementów poprzedzających daną pozycję w ciągu na którym zostanie użyty i wstawia je do ciągu 'result'. Występuje on również w drugiej 'wersji', gdzie sumowanie elementów zastępuje się inną, wybraną przez programistę operacją.
===== Nagłówek =====
#include
===== Definicje =====
== partial_sum 'wersja' podstawowa ==
template
OutputIterator partial_sum ( InputIterator first, InputIterator last,
OutputIterator result )
{
iterator_traits::value_type val;
*result++ = val = *first++;
while (first!=last)
*result++ = val = val + *first++;
return result;
}
== partial_sum 'wersja' pozwalająca na użycie algorytmu z operacją inną niż sumowanie==
template
OutputIterator partial_sum ( InputIterator first, InputIterator last,
OutputIterator result, BinaryOperation binary_op )
{
iterator_traits::value_type val;
*result++ = val = *first++;
while (first!=last)
*result++ = val = binary_op(val,*first++) for binary_op version
return result;
}
===== Parametry =====
first - początek zakresu źródłowego
last - koniec zakresu źródłowego
result - iterator wyjściowy wskazujący miejsce zapisu
binary_op - operacja (obiekt lub funkcja) przyjmująca za argumenty elementy wskazywane przez iteratory z
przedziału [first, last] i zwracająca wynik swojego działania (zamiast sumy).
===== Wartość zwracana =====
Iterator na koniec stworzonego ciągu.
===== Warunki użycia =====
* zakres [first, last) jest prawidłowy\\
===== Złożoność =====
liniowa
===== Przykłady użycia =====
#include
#include
#include
using namespace std;
int moja_funkcja(const int& a, const int& b) { return (a+b+50); }
int main () {
int wartosci[] = {1,2,3,4,5,6,7};
int wynik[7];
partial_sum (wartosci, wartosci+7, wynik);
cout << "Uzycie standardowej wersji partial_sum: ";
for (int i=0; i<7; ++i) { cout << wynik[i] << ' '; }
cout << endl;
partial_sum (wartosci, wartosci+7, wynik, multiplies());
cout << "Uzycie funkcji multiplies: ";
for (int i=0; i<7; ++i) { cout << wynik[i] << ' '; }
cout << endl;
partial_sum (wartosci, wartosci+7, wynik, moja_funkcja);
cout << "Uzycie wlasnej funkcji: ";
for (int i=0; i<7; ++i) { cout << wynik[i] << ' '; }
cout << endl;
return 0;
}