std::partial_sum
是 C++ 標準庫中的一個算法,用于計算序列的部分和或其他二元操作的累積結果。這個函數對輸入范圍內的每個元素應用二元操作,并將結果存儲在輸出范圍中。對于輸入序列
[a, b, c, …],輸出序列將是
[a, a+b, a+b+c, …]`(如果使用默認的加法操作)。
std::partial_sum
的基本實現原理可以描述為以下步驟:
這里是一個簡單的 std::partial_sum
實現示例:
#include<iostream>
#include<vector>
#include<numeric>
template<typename InputIt, typename OutputIt, typename BinaryOperation>
OutputIt partial_sum(InputIt first, InputIt last, OutputIt d_first, BinaryOperation op) {
if (first == last) return d_first;
typename std::iterator_traits<InputIt>::value_type sum = *first;
*d_first = sum;
while (++first != last) {
sum = op(sum, *first);
*++d_first = sum;
}
return ++d_first;
}
int main() {
std::vector<int> nums = {1, 2, 3, 4, 5};
std::vector<int> result(nums.size());
partial_sum(nums.begin(), nums.end(), result.begin(), std::plus<int>());
for (int num : result) {
std::cout<< num << " ";
}
return 0;
}
這個示例中的 partial_sum
函數模板接受輸入范圍的起始和結束迭代器、輸出范圍的起始迭代器以及一個二元操作。在這個例子中,我們使用了加法操作(std::plus<int>()
)來計算輸入序列的部分和。