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