C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++ STLのmodulus(剰余)関数とは?構文と使用例を徹底解説

本記事では、C++におけるmodulus(モジュラス)関数の仕組み、構文、そして具体的なコード例について詳しく解説します。

modulus関数とは?

modulusは、C++の<functional>ヘッダーで定義されている関数オブジェクトクラスです。二項関数オブジェクトとして分類され、2つの引数を受け取り、その剰余演算の結果を返す役割を持ちます。その動作は、算術演算子の「%」とまったく同じです。

modulus関数の構文

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アルゴリズムとbind2ndを組み合わせて、配列内の各要素を2で割った余りを求め、偶数か奇数かを判定しています。

#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] << " is a " << (rem[i] == 0 ? "even" : "odd") << "\n";
    }
    return 0;
}

ここでは、modulus<int>()によってint型の剰余演算を行う関数オブジェクトを生成し、bind2ndで第2引数を2に固定しています。これにより、配列の各要素が2で割り切れるかどうか(つまり偶数か奇数か)を簡単に判定できるのです。

出力

上記のコードを実行すると、以下のような出力が得られます。

10 is a even
20 is a even
35 is a odd
45 is a odd
50 is a even
61 is a odd

補足:現代のC++での代替手段

なお、bind2ndはC++11で非推奨となり、C++17では標準ライブラリから削除されています。現在のC++では、ラムダ式やstd::bindを使用するのが主流です。同じ処理をラムダ式で書き直すと、より簡潔で可読性の高いコードになります。

transform(begin(arr), end(arr), rem, [](int n) { return n % 2; });

modulus関数オブジェクトは、STLのアルゴリズムと組み合わせることで、剰余演算を柔軟かつ効率的に扱える便利なツールです。ぜひ実際のコードでも活用してみてください。

  1. C++ STLのcosh()関数とは?双曲線余弦の求め方をサンプルコード付きで解説

    cosh()関数とは? C++のSTLに組み込まれているcosh()関数は、ラジアン単位で与えられた角度の双曲線余弦(ハイパボリック・コサイン)を計算して返す関数です。使用するには、<cmath>ヘッダーをインクルードする必要があります。 双曲線余弦は、数学的に次の式で定義されます。 cosh(x) = (e^x + e^(-x)) / 2 構文 cosh()関数の構文は以下の通りです。 cosh(var) 構文から分かるように、cosh()関数はfloat型、double型、long double型のいずれかの引数varを受け取ります。そして、その双曲線余弦を返します。なお、引

  2. C++ STLのsinh()関数の使い方を徹底解説

    sinh()関数とはsinh()関数は、ラジアンで指定された値の双曲線正弦(ハイパボリックサイン)を返す関数です。C++のSTL(標準テンプレートライブラリ)に組み込まれており、<cmath>ヘッダをインクルードすることで利用できます。双曲線正弦は、以下の数式で定義されます。sinh(x) = (e^x − e^−x) / 2sinh()関数の構文sinh()関数の構文は以下のとおりです。sinh(var)構文からわかるように、sinh()関数はfloat型、double型、long double型のいずれかのパラメータvarを受け取ります。戻り値は、varの双曲線正弦です。sin