Calculer la somme des tableaux en C++

Jinku Hu 12 octobre 2023
  1. Utilisez la fonction std::accumulate pour calculer la somme des éléments du tableau en C++
  2. Utilisez la fonction std::partial_sum pour calculer des sommes partielles de sous-tableaux en C++
Calculer la somme des tableaux en C++

Cet article explique plusieurs méthodes de calcul d’une somme d’éléments de tableau en C++.

Utilisez la fonction std::accumulate pour calculer la somme des éléments du tableau en C++

std::accumulate fait partie des fonctions numériques incluses dans la bibliothèque STL sous le fichier d’en-tête <numeric>. std::accumulate est une fonction générique qui fonctionne sur les éléments de la plage donnée, qui est spécifiée par les deux premiers arguments représentés par les itérateurs correspondants. Le troisième argument est utilisé pour transmettre la valeur initiale de la somme, qui peut être la valeur littérale de l’objet. Dans ce cas, nous démontrons un tableau dynamique d’entiers stockés dans le conteneur std::vector. Notez que std::accumulate peut éventuellement prendre le quatrième argument d’un type d’objet fonction binaire pour remplacer l’opération d’addition. Le deuxième appel à std::accumulate dans l’exemple de code suivant illustre un tel scénario, à la seule différence que la multiplication est utilisée comme une opération binaire.

#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;
}

Production:

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

Utilisez la fonction std::partial_sum pour calculer des sommes partielles de sous-tableaux en C++

Une autre fonction numérique utile fournie par le même fichier d’en-tête est un std::partial_sum, qui additionne les sous-plages dans la plage donnée. La fonction offre une interface similaire à la précédente, sauf que le troisième argument doit être l’itérateur de départ de la plage où les nombres calculés seront stockés. Dans ce cas, nous écrasons les éléments vectoriels existants avec les résultats additionnés. Notez que l’opération binaire personnalisée peut également être spécifiée avec std::partial_sum pour changer l’option par défaut - 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;
}

Production:

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

En variante, ces fonctions peuvent également être utilisées pour effectuer des opérations au niveau du bit entre les éléments dans la plage donnée. Par exemple, l’extrait de code suivant XORs les éléments vector et stocke les valeurs de résultat dans la même plage.

#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;
}

Production:

1, 13, 0, 10, 1,
Auteur: 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

Article connexe - C++ Array