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

C++のratio_not_equal()テンプレート:使い方と具体例をわかりやすく解説

本記事では、C++ STLに用意されているratio_not_equalテンプレートの動作原理、構文、そして具体的な使用例について詳しく解説します。

ratio_not_equalテンプレートとは?

ratio_not_equalは、C++標準ライブラリ(STL)の<ratio>ヘッダーファイルで定義されている組み込みテンプレートです。このテンプレートは、2つの比率(ratio)が等しくないことを比較・判定するために使用されます。

テンプレートは2つの比率を引数として受け取り、与えられた比率同士が等しくないかどうかをチェックします。たとえば、1/2と3/9という2つの比率は値が異なるため、このテンプレートではtrueが返ります。つまり、2つの比率が等しくない場合にtrueを返すのがこの機能の役割です。

2つの比率の非等価性を確認したい場合、C++で比較ロジックを一から実装する必要はありません。あらかじめ用意されたこのテンプレートを活用することで、コードをシンプルに保ちながら、コンパイル時に正確な判定を行うことができます。

構文

template <class ratio1, class ratio2> ratio_not_equal;

パラメータ

このテンプレートは、次のパラメータを受け取ります。

  • ratio1, ratio2 − 等しくないかどうかを判定したい2つの比率です。

戻り値

2つの比率が等しくない場合にはtrueを返し、2つの比率が等しい場合にはfalseを返します。

入力:

typedef ratio<3, 6> ratio1;
typedef ratio<1, 2> ratio2;
ratio_not_equal<ratio1, ratio2>::value;

出力:

false

※ 3/6と1/2は約分するとどちらも1/2となり等しいため、falseが返ります。

入力:

typedef ratio<3, 9> ratio1;
typedef ratio<1, 2> ratio2;
ratio_not_equal<ratio1, ratio2>::value;

出力:

true

※ 3/9(=1/3)と1/2は等しくないため、trueが返ります。

使用例1:等しくない比率の場合

#include <iostream>
#include <ratio>
using namespace std;
int main(){
    typedef ratio<2, 5> R_1;
    typedef ratio<1, 3> R_2;
    // 比率が等しいかどうかを確認する
    if (ratio_not_equal<R_1, R_2>::value)
        cout<<"Ratio 1 and Ratio 2 aren't equal";
    else
        cout<<"Ratio 1 and Ratio 2 are equal";
    return 0;
}

出力

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

Ratio 1 and Ratio 2 aren't equal

2/5と1/3は値が異なるため、ratio_not_equalはtrueを返し、「等しくない」というメッセージが表示されます。

使用例2:等しい比率の場合

#include <iostream>
#include <ratio>
using namespace std;
int main(){
    typedef ratio<2, 5> R_1;
    typedef ratio<2, 5> R_2;
    // 比率が等しいかどうかを確認する
    if (ratio_not_equal<R_1, R_2>::value)
        cout<<"Ratio 1 and Ratio 2 aren't equal";
    else
        cout<<"Ratio 1 and Ratio 2 are equal";
    return 0;
}

出力

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

Ratio 1 and Ratio 2 are equal

R_1とR_2はどちらも2/5という同じ比率であるため、ratio_not_equalはfalseを返し、「等しい」というメッセージが表示されます。

まとめ

ratio_not_equalテンプレートを使用すると、<ratio>ヘッダーをインクルードするだけで、2つの比率が等しくないかどうかをコンパイル時に簡単に判定できます。型安全な定数式として動作するため、テンプレートメタプログラミングや単位系ライブラリの実装など、さまざまな場面で活用されています。

  1. 【C++】ビット単位のORがkと等しくなる最大長の部分集合を求めるアルゴリズム

    問題文 負でない整数からなる配列と整数 k が与えられたとき、ビット単位のOR(論理和)が k と等しくなる最大長の部分集合を求めます。 具体例 入力配列 = [1, 4, 2]、k = 3 の場合、出力は次のようになります。 [1, 2] 1 と 2 のビット単位のORは 3 に一致します。 これより長い(長さ3以上の)部分集合を作ることはできません。 アルゴリズムの考え方 まず、ビット単位のORには次のような基本的な性質があります。 0 OR 0 = 0 1 OR 0 = 1 1 OR 1 = 1 この性質から、以下のことが導けます。 k の二進表現において 0 になっているビット位置

  2. 【C++ STL】配列のdata()メソッドの使い方を例付きで解説

    配列とは配列とは、同じデータ型の要素を連続したメモリ領域に格納したコレクションのことです。C++標準ライブラリには、配列の機能をサポートするライブラリが数多く含まれています。その中の一つが、arrayコンテナのdata()メソッドです。C++のarray::data()は、オブジェクトの先頭要素を指すポインタを返します。これにより、配列の内部バッファへ直接アクセスしたり、連続したメモリを前提とするC言語スタイルのAPIに配列を渡したりすることができます。構文array_name.data();パラメータこの関数は、引数を受け取りません。戻り値配列の先頭要素を指すポインタを返します。戻り値の型は