C++ | 部分和函数partial_sum的使用技巧

如果你需要处理一个数组的前缀和,或者数组中某一段元素的前缀和,你会怎么做呢?

partial_sum函数是STL中的函数,用于计算范围的部分和,并从结果开始分配范围中的每个元素,range[first,last)中相应元素的部分和。

头文件

numeric(需要使用命名空间std)。


声明

C++11中有partial_sum函数的两种重载:

template<typename _InputIterator, typename _OutputIterator>
    _OutputIterator
    partial_sum(_InputIterator __first, _InputIterator __last,
		_OutputIterator __result)
template<typename _InputIterator, typename _OutputIterator,
	   typename _BinaryOperation>
    _OutputIterator
    partial_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
#include
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;
}

运行结果:
C++ | 部分和函数partial_sum的使用技巧_第1张图片

需要注意的是,如果想计算到a[i]处的部分和,__last参数必须传入a+i+1


vector数组的例子:

#include
#include
#include
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;
}

运行结果:
2


你可能感兴趣的:(C/C++,c++)