📅  最后修改于: 2023-12-03 14:59:46.264000             🧑  作者: Mango
在C++的STL(标准模板库)中,数字头部(numeric header)包含了许多算法,其中最常用且最有用的可能就是accumulate()
和partial_sum()
了。
accumulate()
函数用于计算一个序列的累加和,它接受一个起始范围和一个终止范围,以及一个初始值。下面是它的声明:
template <class InputIterator, class T>
T accumulate (InputIterator first, InputIterator last, T init);
参数说明:
first
和last
:表示计算和的序列范围init
:表示第一个元素的初始化值使用示例:
#include <iostream>
#include <numeric> // 必须包含numeric头文件
using namespace std;
int main(){
int arr[] = {1,2,3,4,5};
int sum = accumulate(arr, arr+5, 0);
cout << "累加和为:" << sum << endl;
return 0;
}
输出:
累加和为:15
partial_sum()
函数用于计算一个序列的部分和序列,也就是从序列的头开始每个元素依次加起来,得到的结果组成一个新的序列。下面是它的声明:
template <class InputIterator, class OutputIterator>
OutputIterator partial_sum (InputIterator first, InputIterator last, OutputIterator result);
参数说明:
first
和last
:表示计算和的序列范围result
:表示计算结果存储的位置使用示例:
#include <iostream>
#include <numeric> // 必须包含numeric头文件
using namespace std;
int main(){
int arr[] = {1,2,3,4,5};
int result[5] = {0};
partial_sum(arr, arr+5, result);
for(int i=0; i<5; i++){
cout << result[i] << " ";
}
cout << endl;
return 0;
}
输出:
1 3 6 10 15
partial_sum()
函数还有一个额外的模板函数,可以指定运算符号类型,使用如下:
#include <iostream>
#include <numeric> // 必须包含numeric头文件
using namespace std;
int main(){
int arr[] = {1,2,3,4,5};
int result[5] = {0};
partial_sum(arr, arr+5, result, multiplies<int>()); // 这里指定使用乘法
for(int i=0; i<5; i++){
cout << result[i] << " ";
}
cout << endl;
return 0;
}
输出:
1 2 6 24 120