전체 글 (598)

11
21

std::transfrom

cppreference : std::transform
https://en.cppreference.com/w/cpp/algorithm/transform

 

인자로는 

1. 입력 범위의 시작 이터레이터

2. 입력 범위의 끝 이터레이터 (끝은 포함X)

3. 결과 저장을 시작할 이터레이터

4. 단항 연산

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

 

사용예시 : 벡터의 원소 2배 만들기

자기자신의 연산을 자기자신에게 저장한다.

std::transform(numbers.begin(), numbers.end(), numbers.begin(), [](int n) {
        return n * 2; // 두 배로
    });

 

사용예시 : 다른 벡터에 저장하기

결과를 받는 쪽에서 미리 공간을 할당해놓지 않았을 경우 std::back_inserter 를 활용할 수 있다.

std::back_inserter
동적으로 크기가 변할 수 있는 컨테이너와 같이 사용함. 결과를 저장할 컨테이너의 크기를 알 수 없을 때 사용
push_back 할 때 동적으로 늘어나는 것과 동일하다고 생각하면 된다.
std::vector<int> numbers = {1, 2, 3, 4, 5};
std::vector<int> squared;

// 결과를 새로운 벡터에 저장
std::transform(numbers.begin(), numbers.end(), std::back_inserter(squared), [](int n) {
    return n * n; // 제곱
});

 

COMMENT