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)의 요소들(iter는 first의 i번째 다음 반복자)에 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