Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Hàm transform_inclusive_scan trong C++

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