Для начала вектор должен быть передан в функцию по ссылке. В противном случае будет создана избыточная копия вектора. Более того, параметр должен быть объявлен с постоянной ссылкой, поскольку сам вектор не изменяется в функции.
Для суммы следует использовать тип 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 );
}