首页 > 解决方案 > 获取向量的总和

问题描述

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

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

}

标签: c++algorithmvector

解决方案


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

对于总和,您应该使用该类型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 );
}

推荐阅读