📜  C++ STL中的accumulate()和partial_sum():数字标头(1)

📅  最后修改于: 2023-12-03 14:59:46.264000             🧑  作者: Mango

C++ STL中的accumulate()和partial_sum():数字标头

在C++的STL(标准模板库)中,数字头部(numeric header)包含了许多算法,其中最常用且最有用的可能就是accumulate()partial_sum()了。

accumulate()

accumulate()函数用于计算一个序列的累加和,它接受一个起始范围和一个终止范围,以及一个初始值。下面是它的声明:

template <class InputIterator, class T>
T accumulate (InputIterator first, InputIterator last, T init);

参数说明:

  • firstlast:表示计算和的序列范围
  • 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()

partial_sum()函数用于计算一个序列的部分和序列,也就是从序列的头开始每个元素依次加起来,得到的结果组成一个新的序列。下面是它的声明:

template <class InputIterator, class OutputIterator>
OutputIterator partial_sum (InputIterator first, InputIterator last, OutputIterator result);

参数说明:

  • firstlast:表示计算和的序列范围
  • 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

参考文献:C++ 算法 accumulate() 和 partial_sum()