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)是错误的。这就是我试图解决的问题:。结果不是31,而是1203237048。你知道为什么吗?我不敢相信一个数组中只有6个元素会导致溢出问题@Welshie321看看弗拉德的答案!您的
int length=sizeof(ar)是错误的。更好的方法是按值使用C++20
std::span
。更好的方法是按值使用C++20
std::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 );
}