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


相关推荐

  1. C语言-atoi函数使用实现

    2024-02-04 01:46:02       40 阅读
  2. C++max函数使用

    2024-02-04 01:46:02       55 阅读
  3. C++函数对象使用

    2024-02-04 01:46:02       39 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-04 01:46:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-04 01:46:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-02-04 01:46:02       82 阅读
  4. Python语言-面向对象

    2024-02-04 01:46:02       91 阅读

热门阅读

  1. 从编程中理解:大脑的无意识与有意识状态

    2024-02-04 01:46:02       54 阅读
  2. DFS和BFS基础算法框架

    2024-02-04 01:46:02       47 阅读
  3. Socket.D 协议的开发缘由

    2024-02-04 01:46:02       43 阅读
  4. web前端较新的前端技术和趋势

    2024-02-04 01:46:02       55 阅读
  5. 【无标题】

    2024-02-04 01:46:02       44 阅读
  6. 假期day2,进程间通信。(2024/2/3)

    2024-02-04 01:46:02       48 阅读
  7. 五大架构风格之四-虚拟机架构风格

    2024-02-04 01:46:02       53 阅读
  8. 深入Go反射

    2024-02-04 01:46:02       41 阅读
  9. Go语言学习踩坑记

    2024-02-04 01:46:02       54 阅读