algorithm_transform_exclusive_scan

algorithm_transform_exclusive_scan (변환 후 배타적 누적)

std::transform_exclusive_scan는 각 요소에 함수를 적용한 뒤 배타적 접두 합계(exclusive prefix sum)를 계산해요. transform과 scan을 한 번에 수행해요.

출처: cppreference

본문

std::transform_exclusive_scan<numeric> 헤더에 정의되어 있어요. C++17부터 사용 가능해요.

template< class InputIt, class OutputIt,
          class T, class BinaryOp, class UnaryOp >
OutputIt transform_exclusive_scan( InputIt first, InputIt last,
                                   OutputIt d_first, T init,
                                   BinaryOp binary_op, UnaryOp unary_op );

[0, std::distance(first, last))의 각 정수 i에 대해, [first, iter)의 요소들(iterfirsti번째 다음 반복자)에 unary_op를 적용한 결과를 init 다음에 이어붙인 수열을 만들고, 그 수열에 binary_op로 일반화된 비가환 합을 계산해 *(d_first + i)에 할당해요. 병렬 실행 정책을 받는 오버로드도 있어요.

반환값 (Return value)

출력 범위의 끝(past-the-end) 반복자예요.

예제 (Example)

#include <functional>
#include <iostream>
#include <iterator>
#include <numeric>
#include <vector>

int main()
{
    std::vector<int> data{1, 2, 3, 4, 5};
    std::vector<int> out(data.size());
    std::transform_exclusive_scan(data.begin(), data.end(), out.begin(), 0,
                                  std::plus<>{}, [](int x) { return x * 2; });
    for (int x : out) std::cout << x << ' ';
    std::cout << '\n';
}

출력:

0 2 6 12 20

더 알아보기 (Learn more)

cppreference