Buenas, tengo este código:
#include <iostream>
using namespace std;
int sum(int num1, int num2);
int sum(int num1, int num2)
{
return num1 + num2;
}
int main()
{
int i = sum(5, 4, 6, 7, 8); // <= como le haria para eso?
cout << i << endl;
}
Pero me gustaría poder pasarle multiples números (argumentos) a la función sum().
Como podría hacer esto?
Saludos :)
Me mataste no se, seguro has programado en otro lenguaje y podias hacerlo y quisiera saber como lo hacias :silbar:
#include <iostream>
using namespace std;
int sum(int num1, int num2, int num3, int num4, int num5)
{
return num1+num2+num3+num4+num5;
}
int main()
{
cout<<"Suma: "<<sum(5, 4, 6, 7, 8)<<endl;
}
Gracias, pero no es así, me refiero a que el numero de argumentos puede ser infinito.
Te dare un ejemplo en Python:
def add(*args): #Sumar (add)
total = 0
for value in args:
total = total + value
print(total)
print(add(5,3,5,29))
# salida 42
print(add(73,32,32,2))
# salida 139
Ahora recuerdo que usaba eso con los switchs de esta forma:
switch(opcion){
case 1 ... 100: sumar(1,2,3,4,5);break;
default: cout<<"Opcion incorrecta"<<endl;
}
Entonces lo que pides es algo asi
##include <iostream>
#include <stdarg.h>
using namespace std;
void sum(int n, ...)
{
int i, suma=0;
int val;
va_list vl;
va_start(vl,n);
for(i=0;i<n;i++){
val=va_arg(vl,int);
suma+=val;
}
va_end(vl);
cout<<"Suma: "<<suma<<endl;
}
int main()
{
sum(4, 4, 6, 7, 8);//El primer argumento indica cuantos argumentos se sumaran a partir del segundo
}
Gracias, funciona pero si cambio los numeros que se le pasan a sum(), se queda pegado mostrando 30, sin importar que numero le pongas.
... y depurando esto es lo que le pasa a la variable suma que esta en el for:
5
10
15
20
25
30.
No tiene sentido sinceramente que eso pase?
En este caso, el primer número indica la cantidad de elementos de la lista. Compila con el estándar C++ 98 en adelante:
#include <iostream>
#include <cstdarg>
int sumar(int, ...);
int main()
{
std::cout << sumar(5, 5, 4, 6, 7, 8) << '\n';
return 0;
}
int sumar(int nNumeros, ...)
{
va_list numeros;
va_start(numeros, nNumeros);
int suma = 0;
for (int i = 0; i < nNumeros; ++i)
{
suma += va_arg(numeros, int);
}
va_end(numeros);
return suma;
}
Estos compilan con el estándar C++ 11 o superior:
#include <iostream>
#include <vector>
int sumar(const std::vector<int> &);
int main()
{
int suma = sumar({ 5, 4, 6, 7, 8 });
std::cout << suma << '\n';
return 0;
}
int sumar(const std::vector<int> &numeros)
{
int suma = 0;
for (const int &num : numeros)
{
suma += num;
}
return suma;
}
#include <iostream>
template <typename T>
T sumar(T inicio)
{
return inicio;
}
template <typename T, typename... Nums>
T sumar(T inicio, Nums... nums)
{
return inicio + sumar(nums...);
}
int main()
{
const int suma = sumar(5, 4, 6, 7, 8);
std::cout << suma << '\n';
return 0;
}
Muchas gracias, va a la perfección.
Saludos :)
Para complementar la respuesta dada previamente, si tienes un vector de enteros v, una manera de sumarlos es esta:
suma = accumulate(v.begin(), v.end(), 0)
Tienes que agregar
#include <numeric>