C++ STL partial_sum 函数说明

2020-06-06  本文已影响0人  book_02

1. 说明

对范围[first,last)内的元素逐个求累加和,放在result容器中。

x表示范围[first,last)内的元素,y表示放在result容器中的结果,求解过程如下:

y0 = x0 
y1 = x0 + x1 
y2 = x0 + x1 + x2 
y3 = x0 + x1 + x2 + x3 
y4 = x0 + x1 + x2 + x3 + x4 
... ... ...

函数签名如下:

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

注意:

  1. result容器要有足够的容量,否则报越界错误

其他说明

  1. 可自定义"求和"运算符
template <class InputIterator, class OutputIterator, class BinaryOperation>
OutputIterator partial_sum (InputIterator first, 
                            InputIterator last,
                            OutputIterator result, 
                            BinaryOperation binary_op);

2. 头文件

#include <numeric>

3. 例子-求部分和数组


#include <iostream>
#include <vector>
#include <numeric>


int main(int argc, char **argv) 
{  
    std::vector<int> nums = { 1,2,3,4,5 };

    std::vector<int> psum;
    psum.resize(nums.size());
    
    partial_sum(nums.begin(), nums.end(), psum.begin());

    for (int num : psum) {
        std::cout << num << "\t";
    }

    return 0;
}

结果:

1       3       6       10      15      

4. 例子-求部分积数组


#include <iostream>
#include <vector>
#include <numeric>
#include <functional>


int main(int argc, char **argv) 
{  
    std::vector<int> nums = { 1,2,3,4,5 };

    std::vector<int> psum;
    psum.resize(nums.size());
    
    partial_sum(nums.begin(), nums.end(), psum.begin(), std::multiplies<int>());

    for (int num : psum) {
        std::cout << num << "\t";
    }

    return 0;
}

结果:

1       2       6       24      120      

使用了std::multiplies<int>()代替默认的求和运算

5. 参考

http://www.cplusplus.com/reference/numeric/partial_sum/
https://en.cppreference.com/w/cpp/algorithm/partial_sum

上一篇 下一篇

猜你喜欢

热点阅读