本文主要是介绍C++ | 部分和函数partial_sum的使用技巧,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
如果你需要处理一个数组的前缀和,或者数组中某一段元素的前缀和,你会怎么做呢?
partial_sum
函数是STL中的函数,用于计算范围的部分和,并从结果开始分配范围中的每个元素,range[first,last)中相应元素的部分和。
头文件
numeric
(需要使用命名空间std)。
声明
C++11中有partial_sum
函数的两种重载:
template<typename _InputIterator, typename _OutputIterator>_OutputIteratorpartial_sum(_InputIterator __first, _InputIterator __last,_OutputIterator __result)
template<typename _InputIterator, typename _OutputIterator,typename _BinaryOperation>_OutputIteratorpartial_sum(_InputIterator __first, _InputIterator __last,_OutputIterator __result, _BinaryOperation __binary_op)
该函数是用模板类写的,因此可以对vector数组进行操作。
函数的参数定义如下:
__first
:迭代到序列中的初始位置(Start of input range)__last
:迭代到序列中的最终位置(End of input range)__result
:记录部分和结果的数组(Output sum)__binary_op
:定义“和”的二元运算(Function object)
在基本的使用中,一般采用第一个重载。
示例
先看普通数组的例子:
#include<iostream>
#include<numeric>
int main()
{int a[6]={1,1,4,5,1,4};int res1[6],res2[2];std::partial_sum(a,a+6,res1);//a[0]~a[5]for(auto& item : res1)printf("%d ",item);putchar('\n');std::partial_sum(a+1,a+3,res2);//a[1]~a[2]for(auto& item : res2)printf("%d ",item);return 0;
}
运行结果:
需要注意的是,如果想计算到a[i]
处的部分和,__last
参数必须传入a+i+1
。
vector数组的例子:
#include<iostream>
#include<numeric>
#include<vector>
using namespace std;
int main()
{vector<int> v={2,0,2,4,2,2};vector<int> res(6);partial_sum(v.begin(),v.end(),res.begin());for(auto& item : res)printf("%d ",item);return 0;
}
运行结果:
这篇关于C++ | 部分和函数partial_sum的使用技巧的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!