Calcular la suma del array en C++
-
Utilice la función
std::accumulate
para calcular la suma de los elementos del array en C++ -
Utilice la función
std::partial_sum
para calcular sumas parciales de subarrays en C++
Este artículo explicará varios métodos de cómo calcular una suma de elementos del array en C++.
Utilice la función std::accumulate
para calcular la suma de los elementos del array en C++
std::accumulate
es parte de las funciones numéricas incluidas en la biblioteca STL bajo el archivo de encabezado <numeric>
. std::accumulate
es una función genérica que trabaja en los elementos en el rango dado, que es especificado por los dos primeros argumentos representados por los iteradores correspondientes. El tercer argumento se usa para pasar el valor inicial de la suma, que puede ser el valor literal del objeto. En este caso, demostramos un array dinámica de enteros almacenados en el contenedor std::vector
. Observe que std::accumulate
opcionalmente puede tomar el cuarto argumento de un tipo de objeto de función binaria para sustituir la operación de suma. La segunda llamada a std::accumulate
en el siguiente código de ejemplo demuestra tal escenario, con la única diferencia de que la multiplicación se usa como una operación 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;
}
Producción :
1, 12, 13, 10, 11,
sum of arr1 = 47
product of arr1 = 17160
Utilice la función std::partial_sum
para calcular sumas parciales de subarrays en C++
Otra función numérica útil proporcionada por el mismo archivo de encabezado es un std::partial_sum
, que suma los sub-rangos en el rango dado. La función ofrece una interfaz similar a la anterior, excepto que el tercer argumento debe ser el iterador inicial del rango donde se almacenarán los números calculados. En este caso, sobrescribimos los elementos vectoriales existentes con los resultados sumados. Tenga en cuenta que la operación binaria personalizada también se puede especificar con std::partial_sum
para cambiar la opción predeterminada - adición.
#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;
}
Producción :
1, 13, 26, 36, 47,
1, 13, 338, 12168, 571896,
Alternativamente, estas funciones también se pueden utilizar para realizar operaciones bit a bit entre los elementos en el rango dado. Por ejemplo, el siguiente fragmento de código XOR coloca los elementos vector
y almacena los valores de resultado en el mismo rango.
#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;
}
Producción :
1, 13, 0, 10, 1,
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