Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++ transform() 함수 완벽 가이드 – 단항·이항 연산 모드와 활용 예제

C++ transform() 함수란?

transform() 함수는 C++ STL(표준 템플릿 라이브러리)에 포함된 알고리즘 함수로, 배열이나 컨테이너의 모든 요소에 특정 연산을 일괄 적용할 때 사용됩니다. 이 함수를 사용하려면 <algorithm> 헤더 파일을 반드시 포함해야 합니다.

예를 들어 배열의 각 요소를 제곱한 값을 다른 배열에 저장하고 싶다면, 반복문을 직접 작성하는 대신 transform() 함수 하나로 간결하게 처리할 수 있습니다.

transform() 함수의 두 가지 동작 모드

transform() 함수는 크게 두 가지 모드로 동작합니다.

  • 단항(Unary) 연산 모드 : 하나의 시퀀스 요소에 연산을 적용
  • 이항(Binary) 연산 모드 : 두 개의 시퀀스 요소를 결합하는 연산을 적용

1. 단항 연산 모드 (Unary Operation Mode)

단항 연산 모드에서는 하나의 연산자(또는 함수)만 받아 입력 요소를 변환한 뒤 출력 시퀀스에 저장합니다. 호출 형식은 다음과 같습니다.

transform(시작_반복자, 끝_반복자, 결과_반복자, 단항_연산_함수);

예제 코드

아래 예제는 1부터 10까지의 숫자가 담긴 배열의 각 요소를 제곱하여 결과 배열에 저장합니다.

#include <iostream>
#include <algorithm>
using namespace std;

int square(int x) {
    // 제곱 함수 정의
    return x * x;
}

int main(int argc, char **argv) {
    int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    int res[10];

    // arr의 모든 요소에 square 함수 적용 후 res에 저장
    transform(arr, arr + 10, res, square);

    for(int i = 0; i < 10; i++) {
        cout << res[i] << "\n";
    }
}

실행 결과

1
4
9
16
25
36
49
64
81
100

2. 이항 연산 모드 (Binary Operation Mode)

이항 연산 모드에서는 두 개의 데이터 시퀀스에 대해 동시에 연산을 수행할 수 있습니다. 예를 들어 서로 다른 두 배열의 같은 위치에 있는 요소들을 더하거나 곱하려면 이항 연산 모드를 사용해야 합니다. 호출 형식은 다음과 같습니다.

transform(첫번째_시작_반복자, 첫번째_끝_반복자, 두번째_시작_반복자, 결과_반복자, 이항_연산_함수);

예제 코드

아래 예제는 두 배열의 대응하는 요소들을 서로 곱한 결과를 새로운 배열에 저장합니다.

#include <iostream>
#include <algorithm>
using namespace std;

int multiply(int x, int y) {
    // 곱셈 함수 정의
    return x * y;
}

int main(int argc, char **argv) {
    int arr1[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    int arr2[10] = {54, 21, 32, 65, 58, 74, 21, 84, 20, 35};
    int res[10];

    // arr1과 arr2의 대응 요소를 곱하여 res에 저장
    transform(arr1, arr1 + 10, arr2, res, multiply);

    for(int i = 0; i < 10; i++) {
        cout << res[i] << "\n";
    }
}

실행 결과

54
42
96
260
290
444
147
672
180
350

마무리 정리

transform() 함수는 반복문 없이도 배열이나 벡터 등의 모든 요소에 원하는 연산을 손쉽게 적용할 수 있는 강력한 STL 알고리즘입니다. 단일 시퀀스를 변환할 때는 단항 연산 모드, 두 시퀀스를 결합할 때는 이항 연산 모드를 사용하면 됩니다. 또한 C++11부터 지원되는 람다 함수(lambda)와 함께 사용하면 별도의 함수 정의 없이도 더욱 간결하게 코드를 작성할 수 있으니 참고하시기 바랍니다.