如何返回此向量整数数组的总和?我下面的代码返回错误的值。
int simpleArraySum(vector<int> ar) {
int sum = 0;
int length = sizeof(ar);
for (int i = 0; i < length; i++){
sum += ar[i];
}
return sum;
}
答案 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)
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循环)。