C++ 求一个向量的和
如何返回这个整数向量数组的和?下面的代码返回了错误的值C++ 求一个向量的和,c++,algorithm,vector,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; } int-simpleArraySum(向量ar){ 整数和=0; int length=
int simpleArraySum(vector<int> ar) {
int sum = 0;
int length = sizeof(ar);
for (int i = 0; i < length; i++){
sum += ar[i];
}
return sum;
}
int-simpleArraySum(向量ar){
整数和=0;
int length=sizeof(ar);
for(int i=0;i
使用:
如果您仍然有意外的结果,则可能是因为您的sum
不足/溢出(可能使用更宽的类型),或者是因为int
中的元素太多(不可能,请切换到std::size\u t
或使用循环范围)。使用:
如果仍然有意外的结果,则可能是由于
sum
不足/溢出(可能使用更宽的类型),或者是因为int
中的元素太多(不可能,请切换到std::size\u t
或使用循环范围).对于初学者,向量应通过引用传递给函数。否则将创建向量的冗余副本。此外,参数应该用常量引用声明,因为向量本身在函数中没有改变
对于总和,您应该使用类型long-long-int
,因为不排除可能存在溢出
本声明
int length = sizeof(ar);
没有道理。变量length
保持类型std::vector
对象的大小,而不是向量中存储的元素数
例如,可以通过以下方式定义函数
long long int simpleArraySum( const std::vector<int> & ar )
{
long long int sum = 0;
for ( const auto &item : ar ) sum += item;
return sum;
}
对于初学者,应该通过引用将向量传递给函数。否则将创建向量的冗余副本。此外,参数应该用常量引用声明,因为向量本身在函数中没有改变 对于总和,您应该使用类型
long-long-int
,因为不排除可能存在溢出
本声明
int length = sizeof(ar);
没有道理。变量length
保持类型std::vector
对象的大小,而不是向量中存储的元素数
例如,可以通过以下方式定义函数
long long int simpleArraySum( const std::vector<int> & ar )
{
long long int sum = 0;
for ( const auto &item : ar ) sum += item;
return sum;
}
这就是我试图解决的问题:。结果不是31,而是1203237048。你知道为什么吗?我不敢相信一个数组中只有6个元素会导致溢出问题@Welshie321看看弗拉德的答案!您的
int length=sizeof(ar)正如Vlad所解释的,code>是错误的。这就是我试图解决的问题:。结果不是31,而是1203237048。你知道为什么吗?我不敢相信一个数组中只有6个元素会导致溢出问题@Welshie321看看弗拉德的答案!您的int length=sizeof(ar)正如Vlad所解释的那样,code>是错误的。更好的方法是按值使用C++20std::span
。更好的方法是按值使用C++20std::span
。sizeof
运算符返回数据结构的大小。std::vector通常有一个指向数据的指针。使用std::vector::size()
方法,例如ar.length
。sizeof
运算符返回数据结构的大小。std::vector通常有一个指向数据的指针。使用std::vector::size()
方法,例如ar.length
。
#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 );
}