向量在n1 n2

问题描述

我想写一个函数calc(array,n1,n2)

array是整数的向量。 n1n2参数是由关系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 );
}

在这种情况下,降低了溢出风险。