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

本文介绍了C++STL库中的partial_sum函数,用于计算数组部分和,包括其两种重载形式、参数含义以及在普通数组和vector数组上的应用实例。
摘要由CSDN通过智能技术生成

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

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

运行结果:
1

需要注意的是,如果想计算到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;
}

运行结果:
2


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值