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);
注意:
- result容器要有足够的容量,否则报越界错误
其他说明
- 可自定义"求和"运算符
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
网友评论