Calcola la somma di array in C++

Jinku Hu 12 ottobre 2023
  1. Usa la funzione std::accumulate per calcolare la somma degli elementi dell’array in C++
  2. Usa la funzione std::partial_sum per calcolare le somme parziali dei sottoarray in C++
Calcola la somma di array in C++

Questo articolo spiegherà diversi metodi su come calcolare una somma di elementi di matrice in C++.

Usa la funzione std::accumulate per calcolare la somma degli elementi dell’array in C++

std::accumulate fa parte delle funzioni numeriche incluse nella libreria STL sotto il file di intestazione <numeric>. std::accumulate è una funzione generica che lavora sugli elementi nell’intervallo dato, che è specificato dai primi due argomenti rappresentati dagli iteratori corrispondenti. Il terzo argomento viene utilizzato per passare il valore iniziale della somma, che può essere il valore letterale dell’oggetto. In questo caso, mostriamo un array dinamico di numeri interi memorizzati nel contenitore std::vector. Si noti che std::accumulate può opzionalmente prendere il quarto argomento di un tipo di oggetto funzione binaria per sostituire l’operazione di addizione. La seconda chiamata a std::accumulate nel prossimo codice di esempio mostra un tale scenario, con l’unica differenza che la moltiplicazione è usata come operazione binaria.

#include <iostream>
#include <numeric>
#include <vector>

using std::accumulate;
using std::cin;
using std::cout;
using std::endl;
using std::vector;

template <typename T>
void printVector(vector<T> &vec) {
  for (const auto &item : vec) {
    cout << item << ", ";
  }
  cout << endl;
}

int main() {
  vector<int> arr1 = {1, 12, 13, 10, 11};

  printVector(arr1);

  int arr1_sum = accumulate(arr1.begin(), arr1.end(), 0);
  cout << "sum of arr1 = " << arr1_sum << endl;

  int arr1_product =
      accumulate(arr1.begin(), arr1.end(), 1, std::multiplies<>());
  cout << "product of arr1 = " << arr1_product << endl;

  return EXIT_SUCCESS;
}

Produzione:

1, 12, 13, 10, 11,
sum of arr1 = 47
product of arr1 = 17160

Usa la funzione std::partial_sum per calcolare le somme parziali dei sottoarray in C++

Un’altra utile funzione numerica fornita dallo stesso file di intestazione è std::partial_sum, che somma i sotto-intervalli nell’intervallo dato. La funzione offre un’interfaccia simile alla precedente, tranne per il fatto che il terzo argomento dovrebbe essere l’iteratore iniziale dell’intervallo in cui verranno memorizzati i numeri calcolati. In questo caso, sovrascriviamo gli elementi vettoriali esistenti con i risultati sommati. Si noti che l’operazione binaria personalizzata può anche essere specificata con std::partial_sum per modificare l’opzione predefinita - addition.

#include <iostream>
#include <numeric>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::vector;

template <typename T>
void printVector(vector<T> &vec) {
  for (const auto &item : vec) {
    cout << item << ", ";
  }
  cout << endl;
}

int main() {
  vector<int> arr1 = {1, 12, 13, 10, 11};

  printVector(arr1);

  std::partial_sum(arr1.begin(), arr1.end(), arr1.begin());
  printVector(arr1);

  std::partial_sum(arr1.begin(), arr1.end(), arr1.begin(), std::multiplies());
  printVector(arr1);

  return EXIT_SUCCESS;
}

Produzione:

1, 13, 26, 36, 47,
1, 13, 338, 12168, 571896,

In alternativa, queste funzioni possono anche essere utilizzate per condurre operazioni bit per bit tra gli elementi nell’intervallo dato. Ad esempio, il seguente frammento di codice XORs gli elementi vettore e memorizza i valori dei risultati nello stesso intervallo.

#include <iostream>
#include <numeric>
#include <vector>

using std::cin;
using std::cout;
using std::endl;
using std::vector;

template <typename T>
void printVector(vector<T> &vec) {
  for (const auto &item : vec) {
    cout << item << ", ";
  }
  cout << endl;
}

int main() {
  vector<int> arr1 = {1, 12, 13, 10, 11};

  printVector(arr1);

  std::partial_sum(arr1.begin(), arr1.end(), arr1.begin(), std::bit_xor());
  printVector(arr1);

  return EXIT_SUCCESS;
}

Produzione:

1, 13, 0, 10, 1,
Autore: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Articolo correlato - C++ Array