ranges::transform
ranges::transform (변환 — ranges)
범위의 각 요소에 함수를 적용해 변환된 결과를 출력하는 ranges 버전 알고리즘이에요. <algorithm> 헤더에 있어요.
출처: cppreference
본문
std::ranges::transform은 범위(또는 두 범위)의 각 요소에 함수를 적용한 결과를 출력에 써요.
namespace std::ranges {
template< std::input_iterator I, std::sentinel_for<I> S,
std::weakly_incrementable O, class F,
class Proj = std::identity >
requires std::indirectly_writable<O, std::indirect_result_t<F&, std::projected<I, Proj>>>
constexpr unary_transform_result<I, O>
transform( I first, S last, O result, F f, Proj proj = {} );
}
- 단항 버전:
f(*it)결과를 출력에. - 이항 버전(binary): 두 범위의 대응 요소를 받는
f를 적용해요.
std::vector<int> v{1, 2, 3, 4};
std::vector<int> out(4);
std::ranges::transform(v, out.begin(), [](int x){ return x * 2; });
// out == {2,4,6,8}
for_each가 부작용을 수행하는 반면, transform은 함수 결과로 새 순서를 만들어요. 요소를 변환해 매핑할 때 주로 씁니다.