相同功能,但参数不同

时间:2019-09-25 04:43:12

标签: c++

我需要编写一个求和函数来添加参数。问题是我需要编写一个函数,但需要使用不同的参数进行调用。这是一个例子。

总和(2,5)-> 7

总和(3,5,10)-> 18

有没有一种方法可以做到这一点?

4 个答案:

答案 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);

Live demo

在C ++ 17和更高版本中,您可以使用fold表达式删除递归:

template<typename... Targs>
int sum(Targs... Fargs) {
    return (Fargs + ...);
}

Live demo

或者,在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});

Live demo

然后使用std::accumulate()删除手动循环:

#include <initializer_list>
#include <numeric>

int sum(std::initializer_list<int> values) {
    return std::accumulate(values.begin(), values.end(), 0);
}

Live demo

如果由于某种原因您没有使用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);

Live demo

答案 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。