algorithm_transform_reduce

algorithm_transform_reduce (변환 후 축약)

std::transform_reduce는 두 범위의 대응 요소 쌍에 변환 함수를 적용한 뒤 결과를 축약(reduce)해요. 병렬화에 유리한 형태로 std::inner_product와 유사해요.

출처: cppreference

본문

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

template< class InputIt1, class InputIt2, class T >
T transform_reduce( InputIt1 first1, InputIt1 last1,
                    InputIt2 first2, T init );

template< class InputIt1, class InputIt2, class T,
          class BinaryOp1, class BinaryOp2 >
T transform_reduce( InputIt1 first1, InputIt1 last1,
                    InputIt2 first2, T init,
                    BinaryOp1 reduce_op, BinaryOp2 transform_op );
  • 1번 오버로드std::inner_product와 동등해요 (first1 * first2를 곱해 합산).
  • 2번 오버로드 — 각 요소 쌍에 transform_op를 적용하고 그 결과를 reduce_op로 초기값 init과 함께 축약해요. 요소들이 지정되지 않은 방식으로 순서가 바뀌고 결합될 수 있어요.

reduce_optransform_op가 비가환적이거나 비결합적이면 동작이 정의되지 않아요. 병렬 실행 정책을 받는 오버로드도 있어요.

반환값 (Return value)

축약의 결과예요.

예제 (Example)

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

int main()
{
    std::vector<int> a{1, 2, 3, 4};
    std::vector<int> b{5, 6, 7, 8};
    int r = std::transform_reduce(a.begin(), a.end(), b.begin(), 0);
    std::cout << r << '\n';
}

출력:

70

더 알아보기 (Learn more)

cppreference