C++ STL 数值头文件中的 accumulate() 和 partial_sum()

2025年3月17日 | 阅读 3 分钟

什么是 C++ STL?

在 C++ 中,我们有 STL,也称为标准模板库,它包含许多已实现的内置函数,我们可以通过导入库直接使用它们。

同样,我们在 STL 中有一个 numeric 库,而 numeric 头文件是 numeric 库的一部分。

numeric 头文件包含许多用于数学计算的内置函数,这为程序员节省了大量时间。

例如

  1. accumulate()
  2. partial_sum()
  3. iota
  4. inner_product
  5. reduce
  6. range
  7. inclusive_scan()
  8. exclusive_scan()

我们将在本文中讨论以下函数

1. accumulate()

如果我们想获取数组在特定范围内的元素之和,那么我们可以直接使用此函数。否则,我们必须使用循环遍历数组才能获得总和。

使用此函数有两种方法

i) 带有三个参数

在这种类型中,此函数将接受三个参数:起始位置、结束位置和一个变量 sum,该变量将其初始值添加到该范围内元素的总和中。

语法

C++ 示例

输出

accumulate() and partial_sum() in C++ STL : Numeric header

说明

在上面的代码中,我们将 sum_variable 初始化为值 12。现在我们有一个包含 9 个元素的数组,我们使用从 arr+0 到 arr+3 的函数。这意味着它将添加从索引 0 到索引 2 的值(不包括最后一个位置索引),然后它将 sum_variable 的值添加到我们得到的总和中。

因此,索引 0 到索引 2 的和是 6,我们将加上 12,所以它将打印值 18。

ii) 带有四个参数

在此函数中,我们可以使用第四个参数作为我们想在运行此函数时运行的另一个参数。

语法

C++ 示例

输出

accumulate() and partial_sum() in C++ STL : Numeric header

说明

在上面的代码中,我们创建了一个乘法函数,它返回两个数字的乘法值。

因此,我们将索引 0 到索引 3 的值相乘,结果将是 24,然后这个结果将再次与我们的 sum_variable 相乘,所以它将打印 24x12 的值,即 288。

1. partial_sum()

如果我们想获取数组在某个范围内的部分和,并将结果存储在另一个数组中,那么我们可以轻松使用此函数。

我们可以通过两种方式使用此函数

i) 带有三个参数

在这种类型中,我们将有三个参数:第一个是起始位置,第二个是最后一个被排除的索引,第三个是我们要存储结果的数组。

语法

假设数组中有 n 个元素,索引从 0 到 n-1。因此,如果我们想获取从索引 L 到索引 R 的部分和,那么我们将创建大小为 R-L+1 的结果数组,结果数组中的值将按如下方式存储

设 res[] 为结果数组,则

C++ 示例

输出

accumulate() and partial_sum() in C++ STL : Numeric header

说明

在上面的例子中,我们将获取索引 2 到索引 5 的部分和,并将这四个值存储在数组 b 中。

所以 b[0]=arr[2] = 3

b[1]=arr[2]+arr[3]=7

b[2]=arr[2]+arr[3]+arr[4]=12

b[3]=arr[2]+arr[3]+arr[4]+arr[5]=18

ii) 带有四个参数

我们可以使用第四个参数作为另一个函数,我们可以在其中定义我们自己的部分和定义。

语法

C++ 示例

输出

accumulate() and partial_sum() in C++ STL : Numeric header

说明

在上面的代码中,我们有自己的函数,所以我们将根据我们自己的函数在结果数组中获取输出。

b[0]=arr[2] =3

b[1]=2*arr[3]-b[0]=5

b[2]=2*arr[4]-b[1]=5

b[3]=2*arr[5]-b[2]=7