std::partial_sum示例代码

本文介绍C++标准库中std::partial_sum函数的使用方法,并通过多个示例展示如何对不同序列进行累加操作。示例包括基本整数累加、幂级数计算、浮点数累加及系数累加等。

std::partial_sum用于求取序列的累加值,例如:原序列为:1, 2, 3, 4, 5,累加后的序列为:1, 3, 6, 10, 15。可以使用带系数的版本,例如乘以系数1.2,累加后的序列为:1, 3.6, 7.92, 14.304, 23.1648

示例代码如下:

#include <algorithm>
#include <functional>
#include <iostream>
#include <iterator>
#include <numeric>
#include <sstream>
#include <vector>

int main(int, char **) {
   
   
  std::vector<int> input_data(10, 2);
  // Or
  // std::vector<int> input_data = {2, 2, 2, 2, 2, 2, 2, 2, 2, 2};

  // Example 1
  std::cout << "The first 10 even numbers are: ";
  std::partial_sum(input_data.begin(), input_data.end(),
                   std::ostream_iterator<int>(std::cout, " "));
  std::cout << "\n";

  // Example 2
  std::vector<int> ouput_data(10, 0);
  std::partial_sum(
### C++ `partial_sum` 函数详解 #### 定义与功能描述 `std::partial_sum` 是 C++ Standard Library 中的一个算法函数,位于 `<numeric>` 头文件内。此函数用于计算输入范围内的部分和,并将结果存储到指定的目标范围内。对于每个位置 i,在目标序列中的第 i 个元素等于源序列前 i+1 项之和。 #### 基本语法结构 以下是 `std::partial_sum` 的基本模板声明: ```cpp template<class InputIt, class OutputIt> OutputIt partial_sum(InputIt first, InputIt last, OutputIt d_first); ``` 以及带有自定义二元操作符版本: ```cpp template<class InputIt, class OutputIt, class BinaryOperation> OutputIt partial_sum(InputIt first, InputIt last, OutputIt d_first, BinaryOperation binary_op); ``` 其中: - `InputIt`: 输入迭代器类型。 - `OutputIt`: 输出迭代器类型。 - `d_first`: 结果保存起始地址。 - `binary_op`: 可选参数,默认为加法运算;可以替换为其他类型的二元运算[^3]。 #### 使用实例说明 下面给出一段简单的例子来展示如何利用 `std::partial_sum` 计算数组的部分累积求和: ```cpp #include <iostream> #include <vector> #include <numeric> // For std::partial_sum int main(){ std::vector<int> numbers = {1, 2, 3, 4}; std::vector<int> result(numbers.size()); // Calculate the partial sums of elements in vector 'numbers' std::partial_sum(numbers.begin(), numbers.end(), result.begin()); for(auto& val : result){ std::cout << val << " "; } } // Expected output: 1 3 6 10 ``` 上述代码片段展示了最基础的形式——即不带额外的二元运算符的情况。如果希望实现不同的累加逻辑,则可以通过传递第三个参数来进行定制化处理[^3]。 #### 自定义二元运算示例 当需要执行不同于简单相加的操作时,比如乘积或其他形式的数据聚合,就可以通过提供一个合适的二元运算对象给 `std::partial_sum` 来达成目的。这里有一个使用 Lambda 表达式的案例,它实现了连续整数之间的乘法而非默认的加法行为: ```cpp #include <iostream> #include <vector> #include <numeric> int main(){ std::vector<int> nums = {1, 2, 3, 4}; std::vector<int> res(nums.size()); auto multiply = [](const int a, const int b){return a * b;}; std::partial_sum(nums.begin(), nums.end(), res.begin(), multiply); for(const auto& item : res){ std::cout << item << " "; } } // Expected output: 1 2 6 24 ``` 这段程序会依次输出各阶段的结果:首先是第一个数字本身(因为只有一个数值),接着是两个相邻数字的成绩...以此类推直到遍历整个列表完成全部计算过程[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值