c++ - 在C++中添加一组数字

标签 c++ arrays function sum add

我知道我可以先将数字存储在数组中,例如arr [] = {1,2,3};
然后调用sum函数将所有数字相加,例如sum(arr);
但是,如果我不想使用arr []而只调用sum(1,2,3)怎么办?
这些值将由用户确定,因此可以是sum(1,2),sum(1,2,3,4,5)或sum(1,2,5)

#include <iostream>
#include <math.h>
using namespace std;

int addition (int arr[]) {
    int length = log2(*(&arr + 1) - arr);
    int res = 0;
    for (int n=0; n<length + 1; n++){
        res += arr[n];
    }
    cout << res << endl;
    return 0;
}

int main ()
{
  int array[] = {5, 10, 15,20};
  int array1[] = {10,15,20,25,30};
    
  addition (array);
  addition (array1);

  return 0;
}

最佳答案

您可以这样编写函数:

template<typename ...Ts>
auto sum(Ts ...ts)
{
    int arr[]{ ts... };
    addition(arr);
}
它将可变参数存储到数组中,并在该数组上调用addition
这是demo

但是,您也可以像这样简单地编写sum:
template<typename ...Ts>
auto sum(Ts ...ts)
{
    return (ts + ...);
}
这是demo

另外,如果您使用std::vector而不是数组,则可以这样编写addition:
void addition (std::vector<int> const & v) {
    std::cout << std::accumulate(v.begin(), v.end(), 0) << "\n";
}
这是demo。请注意,您也可以将accumulate与数组一起使用,但是该函数必须是模板,如下所示:
template<int N>
void addition (int const (&arr)[N]) {
    std::cout << std::accumulate(arr, arr + N, 0) << "\n";
}
这是demo

关于c++ - 在C++中添加一组数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63642647/

相关文章:

javascript - 每次变量更改时如何在 JavaScript 中运行一个函数?

c++ - 如何使用 glDrawElementsInstanced + Texture Buffer 对象?

java - java中设置长度数组的抽象方法?

javascript - YYYY-MM-DDTHH格式的js中的相对时间函数:MM:SS+0000

python - Excel 等效于在 Python pandas 中使用的数组

java - 一副牌

javascript - 你如何在javascript中扩展一个对象

c++ - 如何避免在基于 REST API 的游戏中使用单例模式?

c++ - 将 const float* 转换为 std::array<float, ...>

c++ - 独特的骰子计数器无法正常工作(初学者)