在本教程中,我们将讨论一个程序,以了解C ++中的transform_inclusive_scan()函数。
#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输入元素 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 << std::endl; return 0; }
输出结果
121 605 1694 3630 6655 11011 16940 24684