C++中使用std::partial_sum生成带前导0前缀和的最简洁方法?
实现方案
直接新建一个长度为原数组长度+1的结果数组,首位置0后将std::partial_sum的输出目标指向结果数组的第二个元素即可,全程不需要修改原数组的内容、类型和长度,符合你的要求。
示例代码
#include <iostream> #include <vector> #include <numeric> int main() { // 原数组全程未做任何修改 std::vector<int> a = {1, 2, 3, 4, 5}; // 新建结果数组,长度为原数组+1,首元素默认初始化为0 std::vector<int> prefix_sum(a.size() + 1, 0); // partial_sum的计算结果从prefix_sum的第2位开始写入 std::partial_sum(a.begin(), a.end(), prefix_sum.begin() + 1); // 测试输出:prefix_sum 结果为 0 1 3 6 10 15 for (int num : prefix_sum) { std::cout << num << " "; } return 0; }
方案说明
- 全程没有修改原数组
a的任何内容、长度、类型,满足你提出的限制条件 - 最终得到的
prefix_sum数组符合常规前缀和使用逻辑:prefix_sum[i]代表原数组前i个元素的和,左闭右开区间[l, r)的元素和可以直接用prefix_sum[r] - prefix_sum[l]计算,完全匹配你提到的a[2]-a[0]查询前两个元素和的需求
内容的提问来源于stack exchange,提问作者Y.T.
相关产品推荐
相关产品推荐

