Narzędzia użytkownika

Narzędzia witryny


partial_sum

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 <numeric>

Definicje

partial_sum 'wersja' podstawowa
 
    template <class InputIterator, class OutputIterator>
 
    OutputIterator partial_sum ( InputIterator first, InputIterator last,
 
                                 OutputIterator result )
 
    {
 
      iterator_traits<InputIterator>::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 <class InputIterator, class OutputIterator>
 
    OutputIterator partial_sum ( InputIterator first, InputIterator last,
 
                                 OutputIterator result, BinaryOperation binary_op  )
 
    {
 
      iterator_traits<InputIterator>::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 <iostream>
#include <functional>
#include <numeric>
 
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<int>());
  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;
}
partial_sum.txt · ostatnio zmienione: 2009/04/29 16:31 przez sosna.a