我需要编写一个求和函数来添加参数。问题是我需要编写一个函数,但需要使用不同的参数进行调用。这是一个例子。
总和(2,5)-> 7
总和(3,5,10)-> 18
有没有一种方法可以做到这一点?
答案 0 :(得分:3)
在C ++ 11和更高版本中,您可以使用variadic template:
int sum(int value) {
return value;
}
template<typename... Targs>
int sum(int value, Targs... Fargs) {
return value + sum(Fargs...);
}
sum(2,5);
sum(3,5,10);
在C ++ 17和更高版本中,您可以使用fold表达式删除递归:
template<typename... Targs>
int sum(Targs... Fargs) {
return (Fargs + ...);
}
或者,在C ++ 11和更高版本中,您可以使用std::initializer_list
:
#include <initializer_list>
int sum(std::initializer_list<int> values) {
int result = 0;
for (int value : values) {
result += value;
}
return result;
}
sum({2,5});
sum({3,5,10});
然后使用std::accumulate()
删除手动循环:
#include <initializer_list>
#include <numeric>
int sum(std::initializer_list<int> values) {
return std::accumulate(values.begin(), values.end(), 0);
}
如果由于某种原因您没有使用C ++ 11编译器,则可以改用数组:
template<size_t N>
int sum(int (&values)[N]) {
int result = 0;
for (int i = 0; i < N; ++i) {
result += values[i];
}
return result;
}
int values[] = {2,5};
sum(values);
int values2[] = {3,5,10};
sum(values2);
答案 1 :(得分:0)
您可以使用向量或数字集并将该对象传递给函数。然后进行操作并返回您的总和。
答案 2 :(得分:-1)
sum(int n_1 = 0,int n_2 = 0,int n_3 = 0) 您可以调用一个,两个或三个参数
答案 3 :(得分:-4)
是的!使用C ++ 11,您可以创建可变参数函数。这是代码。
int sum(int n, ...){
va_list list;
va_start(list ,n);
int x;
int s=0;
for(int i=0; i<n; i++){
x = va_arg(list,int);
s+=x;
}
return s;
}
总的来说,您可以致电sum(2, 2, 5)
。
第一个参数是您拥有的参数数。
此外,您可以调用sum(3, 3, 5, 10)
并返回18。