transform_inclusive_scan tính tiền tố (prefix sum) sau khi áp dụng phép toán unary lên từng phần tử, rồi combine bằng binary operation.
Ví dụ
#include <iostream>
#include <vector>
using namespace std;
namespace point_input_iterator {
template <class InputItrator, class OutputItrator, class BinaryOperation, class UnaryOperation>
OutputItrator transform_inclusive_scan(InputItrator first, InputItrator last, OutputItrator d_first,
BinaryOperation binary_op, UnaryOperation unary_op) {
*d_first = unary_op(*first);
first++; d_first++;
for (auto it = first; it != last; it++) {
*d_first = binary_op(unary_op(*it), *(d_first - 1));
d_first++;
}
return d_first;
}
}
int main() {
vector<int> InputVector{11, 22, 33, 44, 55, 66, 77, 88};
vector<int> OutputVector(8);
point_input_iterator::transform_inclusive_scan(InputVector.begin(), InputVector.end(), OutputVector.begin(),
[](auto xx, auto yy) { return xx + yy; },
[](auto xx) { return xx * xx; });
for (auto item : OutputVector) cout << item << " ";
cout << endl;
return 0;
}
Đầu ra
121 605 1694 3630 6655 11011 16940 24684