Calcule a soma do Array em C++

Jinku Hu 12 outubro 2023
  1. Use a função std::acumular para calcular a soma dos elementos do array em C++
  2. Use a função std::partial_sum para calcular somas parciais de subarrays em C++
Calcule a soma do Array em C++

Este artigo explicará vários métodos de como calcular a soma dos elementos do array em C++.

Use a função std::acumular para calcular a soma dos elementos do array em C++

std::accumulate faz parte das funções numéricas incluídas na biblioteca STL sob o arquivo de cabeçalho <numeric>. std::accumulate é uma função genérica que funciona nos elementos no intervalo dado, que é especificado pelos dois primeiros argumentos representados pelos iteradores correspondentes. O terceiro argumento é utilizado para passar o valor inicial da soma, que pode ser o valor literal do objeto. Neste caso, demonstramos um array dinâmico de inteiros armazenados no contêiner std::vector. Observe que std::accumulate pode opcionalmente receber o quarto argumento de um tipo de objeto de função binária para substituir a operação de adição. A segunda chamada para std::accumulate no próximo código de exemplo demonstra tal cenário, com a única diferença de que a multiplicação é usada como uma operação binária.

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

Resultado:

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

Use a função std::partial_sum para calcular somas parciais de subarrays em C++

Outra função numérica útil fornecida pelo mesmo arquivo de cabeçalho é std::partial_sum, que soma os subfaixas no intervalo dado. A função oferece uma interface semelhante à anterior, exceto que o terceiro argumento deve ser o iterador inicial do intervalo onde os números calculados serão armazenados. Nesse caso, substituímos os elementos vetoriais existentes com os resultados somados. Observe que a operação binária personalizada também pode ser especificada com std::partial_sum para alterar a opção padrão - adição.

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

Resultado:

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

Alternativamente, essas funções também podem ser utilizadas para conduzir operações bit a bit entre os elementos em um determinado intervalo. Por exemplo, o fragmento de código a seguir XORs os elementos vector e armazena os valores de resultado no mesmo intervalo.

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

Resultado:

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

Artigo relacionado - C++ Array