algorithm_transform
algorithm_transform (함수 적용 변환)
std::transform는 소스 범위의 요소들에 함수를 적용하고 결과를 목적지 범위에 저장해요. 단항 또는 이항 함수를 지원해요.
출처: cppreference
본문
std::transform는 count를 std::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)
N을 std::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