La libreria <numeric> contiene funzioni matematiche ad alto livello pensate per lavorare su insiemi di dati (array, vettori, intervalli di iteratori).
È una parte fondamentale della STL quando si devono fare operazioni come:
- calcolare la somma di un vettore
- calcolare la media
- eseguire prodotti scalari
- ottenere somme parziali
- sottrarre elementi consecutivi
1️⃣ Inclusione della libreria
#include <numeric>
Funziona con iteratori, quindi può operare su: array, vector, list, ecc.
2️⃣ Funzioni principali di <numeric>
| Funzione | Descrizione |
|---|---|
accumulate(first, last, init) |
Somma gli elementi e restituisce il totale |
accumulate(first, last, init, op) |
Applica un operatore personalizzato (moltiplicazione, max, ecc.) |
inner_product(a1, a1_end, a2, init) |
Prodotto scalare tra due vettori |
partial_sum(first, last, dest) |
Somme parziali (prefix sums) |
adjacent_difference(first, last, dest) |
Differenza tra elementi consecutivi |
3️⃣ accumulate – somma degli elementi
vector v = {1, 2, 3, 4, 5};
int somma = accumulate(v.begin(), v.end(), 0);
cout << "Somma: " << somma; // 15
4️⃣ accumulate con operatore personalizzato
Esempio: prodotto di tutti gli elementi.
int prodotto = accumulate(v.begin(), v.end(), 1,
[](int a, int b){ return a * b; });
5️⃣ inner_product – prodotto scalare
vector a = {1, 2, 3};
vector b = {4, 5, 6};
int prod = inner_product(a.begin(), a.end(), b.begin(), 0);
// 1*4 + 2*5 + 3*6 = 32
6️⃣ partial_sum – somme parziali
vector v = {1, 2, 3, 4};
vector out(4);
partial_sum(v.begin(), v.end(), out.begin());
// out = {1, 3, 6, 10}
7️⃣ adjacent_difference – differenze consecutive
vector v = {10, 15, 25, 40};
vector diff(4);
adjacent_difference(v.begin(), v.end(), diff.begin());
// diff = {10, 5, 10, 15}
LABORATORIO
Operazioni Numeriche con numeric
In questo laboratorio userai le funzioni della libreria <numeric>
per calcolare somme, prodotti, somme parziali e differenze.
Strumenti:
- Libreria
<numeric> - Vettori e iteratori
- Funzioni come
accumulate,partial_sum
1 Somma degli elementi
Crea un vettore da 1 a 10 e calcolane la somma.
vector v = {1,2,3,4,5,6,7,8,9,10};
int somma = accumulate(v.begin(), v.end(), 0);
2 Prodotto scalare
Calcola il prodotto scalare di due vettori di 5 elementi.
int prod = inner_product(a.begin(), a.end(), b.begin(), 0);
3 Somme parziali
Calcola la somma progressiva di un vettore.
partial_sum(v.begin(), v.end(), out.begin());
4 Esercizi
- Calcola la media di un vettore usando
accumulate. - Trova la prima posizione in cui le differenze consecutive superano 10.
- Crea un programma che confronta due vettori e stampa se il loro prodotto scalare è positivo o negativo.
- Usa
partial_sumper simulare l andamento del saldo bancario.