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のアルゴリズムと組み合わせることで、剰余演算を柔軟かつ効率的に扱える便利なツールです。ぜひ実際のコードでも活用してみてください。
-
C++ STLのcosh()関数とは?双曲線余弦の求め方をサンプルコード付きで解説
cosh()関数とは? C++のSTLに組み込まれているcosh()関数は、ラジアン単位で与えられた角度の双曲線余弦(ハイパボリック・コサイン)を計算して返す関数です。使用するには、<cmath>ヘッダーをインクルードする必要があります。 双曲線余弦は、数学的に次の式で定義されます。 cosh(x) = (e^x + e^(-x)) / 2 構文 cosh()関数の構文は以下の通りです。 cosh(var) 構文から分かるように、cosh()関数はfloat型、double型、long double型のいずれかの引数varを受け取ります。そして、その双曲線余弦を返します。なお、引
-
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