Linguaggio C++

Libreria Numeric

Introduzione alla libreria numeric del C++: funzioni per operazioni numeriche su insiemi di valori come accumulate, inner_product, partial_sum e adjacent_difference.

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>

FunzioneDescrizione
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.


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_sum per simulare l andamento del saldo bancario.