C++ accumulate() 和 partial_sum() 在 STL 中的使用
什么是 C++ STL
在 C++ 中,我们有 STL,也被称为标准模板库,其中有很多内建的函数实现,我们可以通过导入库直接使用它们。
同样,我们在 STL 中有一个数值库,数值头部是数值库的一部分。
数值头部有很多内建的用于数学计算的函数,这为程序员节省了很多时间。
示例:
- accumulate()
- partial_sum()
- iota
- inner_product
- reduce
- range
- incluse_scan()
- exclusive_scan()
我们将在本文中讨论以下函数:
accumulate()
如果我们想要得到数组在特定范围内的元素之和,我们可以直接使用这个函数。否则,我们必须使用循环遍历数组然后得到和。
该函数有两种使用方式:
i) 使用三个参数
在这种类型中,该函数将接受三个参数:起始位置、结束位置和一个变量 sum,它会将其初始值加到该范围内元素的和中。
语法:
accumulate (starting_position,ending_position,sum_variable)
C++示例:
#include
#include
using namespace std;
int main() {
int sum_variable = 12;
int arr[]={1,2,3,4,5,6,7,8,9};
cout<
输出:
说明
在以上代码中,我们将sum_variable初始化为12。现在我们有一个包含9个元素的数组,并且我们使用从arr+0到arr+3的函数。这意味着它将添加从索引0到索引2的值(最后一个索引位置被排除),然后将sum_variable的值添加到我们得到的总和上。
所以索引0到索引2的总和是六,我们将添加12,所以它将打印值18。
ii)带有四个参数
在这个函数中,我们可以使用第四个参数作为我们在运行该函数时要运行的另一个参数。
语法:
accumulate (starting_position,ending_position,sum_variable,special_function)
C++ 示例:
#include
#include
using namespace std;
int mult(int a,int b){
return a*b;
}
int main() {
int sum_variable = 12;
int arr[]={1,2,3,4,5,6,7,8,9};
cout<
输出:
说明:
在上述代码中,我们创建了一个mult函数,它返回两个数字的乘积值。
所以我们将从索引0到索引3的值相乘,得到24,然后将这个结果再与我们的sum_variable相乘,所以它将打印出24×12的值,即288。
partial_sum()
如果我们想要获取一个数组的部分和,并将此结果存储在另一个数组中,那么我们可以很容易地使用这个函数。
我们可以以两种方式使用这个函数:
i) 使用三个参数
在这种类型中,我们将有三个参数: 第一个是起始位置,第二个是被排除的最后一个索引,第三个是我们想要存储结果的数组。
语法:
partial_sum(starting_position,ending_position,resultant_array);
假设我们有一个长度为n的数组,索引从0到n-1。如果我们想要获取从索引L到索引R的部分和,那么我们将创建大小为R-L+1的结果数组,并将结果数组中的值存储如下:
设res[]为结果数组,则:
res[0]=arr[L];
res[1]=arr[L]+arr[L+1];
res[2]=arr[L]+arr[L+1]+arr[L+2];
res[R-L]=arr[L]+arr[L+1]+arr[L+2].....arr[R];
C++ 示例:
#include
#include
using namespace std;
int main() {
int arr[]={1,2,3,4,5,6,7,8,9};
int L=2;
int R=5;
int b[R-L+1];
partial_sum(arr+L,arr+R+1,b);
for(int i=0;i<=R-L;i++){
cout<
输出:
解释:
在上面的例子中,我们将对索引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) 使用四个参数
我们可以将第四个参数作为另一个函数,可以在其中定义我们自己的部分求和的定义。
语法:
partial_sum(starting_position,ending_position,resultant_array,special_function);
C++ 示例:
#include
#include
using namespace std;
int myFun(int a,int b){
return 2*b-a;
}
int main() {
int arr[]={1,2,3,4,5,6,7,8,9};
int L=2;
int R=5;
int b[R-L+1];
partial_sum(arr+L,arr+R+1,b,myFun);
for(int i=0;i<=R-L;i++){
cout<
输出:
解释:
在上面的代码中,我们有自己的函数,这样我们会根据我们自己的函数在结果数组中获得输出。
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