问题描述
array
是整数的向量。 n1
和n2
参数是由关系0<= n1<= n2<array.size()
定义的整数。
calc
方法应返回其索引属于[n1; n2]
区间的数组整数之和。
我尝试使用此代码,但不正确
class Answer {
public:
static int cal(const vector<int>& array,int n1,int n2) {
int sum = 0;
for (vector<int>::iterator it = array[0]+n1; it != array[0]+n2; ++it)
{
sum + = *it;
}
return sum;
}
};
解决方法
只需使用<numeric>
标头中的std::accumulate
,如下所示:
int sum = std::accumulate(std::begin(array) + n1,std::begin(array) + n2 + 1,0);
,
您可以使用标头std::accumulate
中声明的标准算法<numeric>
。
例如
#include <iterator>
#include <numeric>
//...
static int cal(const vector<int>& array,int n1,int n2) {
return std::accumulate( std::next( std::begin( array ),n1 ),std::next( std::begin( array ),n2 + 1 ),0 );
}
请注意,最好至少像这样声明函数
static long long int cal(const vector<int>& array,std::vector<int>::size_type n1,std::vector<int>::size_type n2) {
return std::accumulate( std::next( std::begin( array ),0ll );
}
在这种情况下,降低了溢出风险。