如何解决向量在n1 n2
我想写一个函数calc(array,n1,n2)
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 );
}
在这种情况下,降低了溢出风险。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。