algorithm_transform

algorithm_transform (함수 적용 변환)

std::transform는 소스 범위의 요소들에 함수를 적용하고 결과를 목적지 범위에 저장해요. 단항 또는 이항 함수를 지원해요.

출처: cppreference

본문

std::transformcountstd::distance(first1, last1)라고 할 때, 주어진 소스 범위의 요소들에 주어진 함수를 적용하고 그 결과를 목적지 범위 [d_first, std::next(d_first, count))에 저장해요. <algorithm> 헤더에 정의되어 있어요.

template< class InputIt, class OutputIt, class UnaryOp >
OutputIt transform( InputIt first1, InputIt last1,
                    OutputIt d_first, UnaryOp unary_op );

template< class InputIt1, class InputIt2,
          class OutputIt, class BinaryOp >
OutputIt transform( InputIt1 first1, InputIt1 last1, InputIt2 first2,
                    OutputIt d_first, BinaryOp binary_op );
  • 1번 오버로드 — 소스 범위 [first1, last1)이 하나이고, 각 요소에 단항 연산 unary_op를 적용해요.
  • 2번 오버로드 — 소스 범위가 두 개이고, 두 범위의 대응 요소 쌍에 이항 연산 binary_op를 적용해요.

병렬 실행 정책을 받는 오버로드도 있어요.

반환값 (Return value)

변환된 마지막 요소 다음의 반복자예요.

복잡도 (Complexity)

Nstd::distance(first1, last1)라고 하면 정확히 N번의 unary_op(또는 binary_op) 적용이 필요해요.

예제 (Example)

#include <algorithm>
#include <iostream>
#include <vector>

int main()
{
    std::vector<int> v{1, 2, 3, 4, 5};
    std::transform(v.begin(), v.end(), v.begin(), [](int x) { return x * x; });
    for (int x : v) std::cout << x << ' ';
    std::cout << '\n';
}

출력:

1 4 9 16 25

더 알아보기 (Learn more)

cppreference