如何在C ++中添加数组中的所有数字?

时间:2014-11-15 02:45:57

标签: c++ arrays addition

而不是输入

array[0] + array[1] //.....(and so on)

有没有办法将数组中的所有数字相加?我正在使用的语言是c ++ 我希望能够以更少的输入方式完成它,而不是仅仅输入它。

9 个答案:

答案 0 :(得分:35)

以下是在C ++中执行此操作的惯用方法:

int a[] = {1, 3, 5, 7, 9};
int total = accumulate(begin(a), end(a), 0, plus<int>());

Demo.

答案 1 :(得分:11)

假设您有int array[N]

您可以这样做:

int sum = 0;
for(auto& num : array)
    sum += num;

答案 2 :(得分:4)

如果您使用valarray,则会有一个成员函数sum()

#include <iostream>     // std::cout
#include <valarray>     // std::valarray

int main () {
  std::valarray<int> myvalarray(4);
  myvalarray[0] = 0;
  myvalarray[1] = 10;
  myvalarray[2] = 20;
  myvalarray[3] = 30;
  std::cout << "The sum is " << myvalarray.sum() << '\n';

  return 0;
}

答案 3 :(得分:4)

试试这个:

int array[] = {3, 2, 1, 4};
int sum = 0;

for (int i = 0; i < 4; i++) {
    sum = sum + array[i];
}
std::cout << sum << std::endl;

答案 4 :(得分:3)

我能看到的最简单方法是使用循环。奖励是你可以在任何整数数组上使用它而不需要重写很多代码。我经常使用Java,所以我希望没有太多的语法错误,但是这样的东西应该有效:

int addArray(int[] array, int length){
    int sum=0;
    for(int count=0;count<length;count++){
        sum+=array[count];
    }
    return sum;
}

答案 5 :(得分:2)

在C ++ 17中,可以使用折叠表达式:

template<typename ...Ts>
int sum_impl(Ts&& ...a)
{
    return (a + ...);
}

如果sum_impl具有恒定数量的参数,我们可以像这样调用它:

std::apply(sum_impl, arr);

假设arr是std::array<int, N>。但由于它是可变的,所以需要帮助一点:

using namespace std;

template <class Array, size_t... I>
int sum_impl(Array&& a, index_sequence<I...>)
{
        return sum_impl(get<I>(forward<Array>(a))...);
}

template <class Array>
int sum(Array&& a)
{
        return sum_impl(forward<Array>(a),
                        make_index_sequence<tuple_size_v<decay_t<Array>>>{});
}

因此,假设这些助手已到位,代码将如下所示:

template<typename ...Ts>
int sum_impl(Ts&& ...a)
{
    return (a + ...);
}

int main()
{
    array<int, 10> arr{0,1,2,3,4,5,6,7,8,9};
    cout << sum(arr) << "\n";
    return 0;
}

答案 6 :(得分:0)

我们可能会使用用户定义的功能。

代码段:

NullPointerException

答案 7 :(得分:0)

int Sum;
for(int& S: List) Sum += S;

答案 8 :(得分:0)

如果编译器支持c ++ 17,则可以结合使用Parameter pack和fold表达式来实现。模板参数包是一个模板参数,它接受零个或多个模板参数,并且通过fold运算符将参数包缩小为二进制运算符。 (在这种情况下,{+

#include <iostream>
#include <array>
#include <utility>

/* 
 * References:
 *   [1] https://en.cppreference.com/w/cpp/language/fold
 *   [2] https://en.cppreference.com/w/cpp/language/parameter_pack
 */


template <typename ...T>
auto sum(T ...args)
{
    return (args + ...);
}

template <typename T, std::size_t ...Is>
auto sum(T t, std::index_sequence<Is...>)
{
    return sum(t[Is]...);
}

int main()
{
    std::array<int, 3> a1 = {1, 4, 3};
    int a2[5] = {1, 2, 3, 4, 0};

    std::cout << "Sum a1 = " << sum(a1, std::make_index_sequence<a1.size()>{}) << "\n";
    std::cout << "Sum a2 = " << sum(a2, std::make_index_sequence<5>{}) << "\n";
    return 0;
}