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

C++ STL 모듈러스(Modulus) 함수 완벽 가이드 – 개념, 문법, 예제


이 글에서는 C++ STL의 모듈러스(modulus) 함수가 어떻게 동작하는지, 그 문법은 어떻게 되어 있는지, 그리고 실제 예제를 통해 어떻게 활용할 수 있는지 자세히 알아보겠습니다.

C++의 모듈러스 함수란 무엇인가?

모듈러스 함수는 C++의 <functional> 헤더 파일에 정의되어 있는 함수 객체(function object) 클래스입니다. 두 개의 인자에 대해 나머지 연산을 수행한 결과를 반환하는 이항 함수 객체(binary function object)로, 산술 연산자 '%'와 정확히 같은 방식으로 동작합니다.

모듈러스 함수의 문법

template<class T>
struct modulus : binary_function<T, T, T> {
    T operator()(const T& a, const T& b) const {
        return a % b;
    }
};

템플릿 매개변수

이 함수 객체는 다음과 같은 매개변수를 받습니다.

  • T − 함수 호출 시 전달되는 인자의 데이터 타입입니다. int, long 등 나머지 연산이 가능한 산술 타입을 사용할 수 있습니다.

사용 예제

다음 예제는 transform 알고리즘과 함께 모듈러스 함수를 사용하여 배열의 각 요소가 짝수인지 홀수인지 판별하는 프로그램입니다.

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

int main() {
    // 배열 생성
    int arr[] = { 10, 20, 35, 45, 50, 61 };
    int rem[6];

    // 각 요소를 2로 나눈 나머지를 rem 배열에 저장
    transform(arr, arr + 6, rem, bind2nd(modulus<int>(), 2));

    // 결과 출력
    for (int i = 0; i < 6; i++) {
        cout << arr[i] << " : "
             << (rem[i] == 0 ? "짝수" : "홀수") << "\n";
    }
    return 0;
}

실행 결과

위 코드를 실행하면 다음과 같은 출력이 생성됩니다.

10 : 짝수
20 : 짝수
35 : 홀수
45 : 홀수
50 : 짝수
61 : 홀수

참고: 최신 C++에서의 대안

예제에 사용된 std::bind2nd는 C++11에서 폐기(deprecated)되었으며, C++17부터는 표준에서 완전히 제거되었습니다. 따라서 최신 컴파일러 환경에서는 람다(lambda) 표현식을 사용하는 것이 좋습니다.

transform(arr, arr + 6, rem, [](int x) { return x % 2; });

람다 표현식을 사용하면 추가적인 바인딩 없이도 더 간결하고 직관적으로 동일한 기능을 구현할 수 있습니다. 참고로 std::modulus 자체는 여전히 표준 라이브러리에 포함되어 있으며, C++14부터는 인자 없이 특수화된 std::modulus<void>(투명 함수 객체)를 통해 서로 다른 타입의 인자도 유연하게 처리할 수 있습니다.