C++ std :: accumulano


Esempio

Definito nell'intestazione <numeric>

template<class InputIterator, class T>
T accumulate(InputIterator first, InputIterator last, T init); // (1)

template<class InputIterator, class T, class BinaryOperation>
T accumulate(InputIterator first, InputIterator last, T init, BinaryOperation f); // (2)

effetti:

std :: accumula esegue l'operazione di piega usando la funzione f nell'intervallo [first, last) iniziando con init come valore dell'accumulatore.

In effetti è equivalente a:

T acc = init;
for (auto it = first; first != last; ++it)
    acc = f(acc, *it);
return acc;

Nella versione (1) l' operator+ è usato al posto di f , quindi accumulare sul contenitore equivale alla somma degli elementi del contenitore.

parametri:

first, last - l'intervallo per applicare f a.
init - valore iniziale dell'accumulatore.
f - funzione di piegatura binaria.

Valore di ritorno:

Valore accumulato di domande f .

Complessità:

O (n × k) , dove n è la distanza dal first last , O (k) è la complessità della funzione f .

Esempio:

Esempio di somma semplice:

std::vector<int> v { 2, 3, 4 };
auto sum = std::accumulate(v.begin(), v.end(), 1);
std::cout << sum << std::endl;

Produzione:

10

Converti cifre in numero:

c ++ 11
class Converter {
public:
    int operator()(int a, int d) const { return a * 10 + d; }
};

e più tardi

const int ds[3] = {1, 2, 3};
int n = std::accumulate(ds, ds + 3, 0, Converter());
std::cout << n << std::endl;
c ++ 11
const std::vector<int> ds = {1, 2, 3};
int n = std::accumulate(ds.begin(), ds.end(),
                        0,
                        [](int a, int d) { return a * 10 + d; });
std::cout << n << std::endl;

Produzione:

123