Volver a la página principal
viernes 4 octubre 2024
18

Cómo usar std::accumulate en C++

std::accumulate es una función de la biblioteca estándar de C++ que permite sumar o acumular elementos de un rango en un contenedor (como un array, std::vector, o cualquier otro contenedor iterable). Se encuentra definida en el encabezado <numeric> y es muy útil para operaciones de reducción, como calcular la suma total de un conjunto de valores o realizar combinaciones personalizadas.

¿Cómo funciona std::accumulate?

std::accumulate toma tres parámetros obligatorios:

1. Inicio del rango: Un iterador apuntando al primer elemento del rango.

2. Fin del rango: Un iterador apuntando al final del rango.

3. Valor inicial: El valor a partir del cual comienza la acumulación.

Además, se puede pasar un cuarto parámetro opcional: una función binaria que define cómo se deben acumular los elementos. Si no se especifica, la función realiza la suma de los elementos por defecto.

Sintaxis básica:

std::accumulate(inicio, fin, valor_inicial, operación);
  • inicio y fin: Punteros o iteradores que definen el rango del contenedor.
  • valor_inicial: Valor a partir del cual se empieza la acumulación.
  • operación (opcional): Una función binaria que define la operación a aplicar (como suma, multiplicación, etc.).

Ejemplos de uso de std::accumulate en C++

Sumar todos los elementos de un vector

#include <iostream>
#include <vector>
#include <numeric> // Para std::accumulate

int main() {
    std::vector<int> numeros = {1, 2, 3, 4, 5};
    int suma = std::accumulate(numeros.begin(), numeros.end(), 0);
    std::cout << "Suma total: " << suma << std::endl; // Output: 15
    return 0;
}

Usar std::accumulate con una operación personalizada

Puedes usar std::accumulate con una operación personalizada, como la multiplicación o concatenación de cadenas.

#include <iostream>
#include <vector>
#include <numeric> // Para std::accumulate

int main() {
    std::vector<int> numeros = {1, 2, 3, 4, 5};
    int producto = std::accumulate(numeros.begin(), numeros.end(), 1, std::multiplies<int>());
    std::cout << "Producto total: " << producto << std::endl; // Output: 120
    return 0;
}

Concatenar cadenas con std::accumulate

std::accumulate también se puede usar con contenedores de cadenas para realizar concatenaciones.

#include <iostream>
#include <vector>
#include <numeric> // Para std::accumulate
#include <string>

int main() {
    std::vector<std::string> palabras = {"Hola", " ", "mundo", "!"};
    std::string frase = std::accumulate(palabras.begin(), palabras.end(), std::string(""));
    std::cout << "Frase concatenada: " << frase << std::endl; // Output: Hola mundo!
    return 0;
}

Referencia oficial

Para más detalles sobre std::accumulate, puedes consultar la documentación oficial en cppreference.

Etiquetas:
cpp
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer