获取向量的总和

时间:2019-10-05 13:39:26

标签: c++ algorithm vector

如何返回此向量整数数组的总和?我下面的代码返回错误的值。

int simpleArraySum(vector<int> ar) {
    int sum = 0;
    int length = sizeof(ar);
    for (int i = 0; i < length; i++){
        sum += ar[i];
    }
    return sum;

}

2 个答案:

答案 0 :(得分:3)

对于初学者,矢量应通过引用传递给函数。否则,将创建矢量的冗余副本。此外,该参数应使用常量引用声明,因为矢量本身在函数中不会更改。

对于总和,您应该使用类型long long int,因为不排除可能会发生溢出。

此声明

int length = sizeof(ar);

没有道理。变量length保持std::vector<int>类型的对象的大小,而不是矢量中存储的元素数量。

例如,可以通过以下方式定义函数

long long int simpleArraySum( const std::vector<int> & ar )
{
    long long int sum = 0;

    for ( const auto &item : ar ) sum += item;

    return sum;
}

另一种方法是使用标头std::accumulate中声明的标准算法<numeric>。例如

#include <vector>
#include <iterator>
#include <numeric>

//...

long long int simpleArraySum( const std::vector<int> & ar )
{
    return std::accumulate( std::begin( ar ), std::end( ar ), 0ll );
}

答案 1 :(得分:1)

使用std::accumulate

int simpleArraySum(vector<int> ar) {
    return std::accumulate(ar.begin(), ar.end(), 0);
}

无论如何,您的length初始化是错误的,应该是:

int length = ar.size();

如果仍然有意外结果,则可能是sum不足/溢出(可能使用更宽的类型),或者元素太多而无法容纳int (不太可能切换到std::size_t或改用range-for循环)。