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

C++ STLのcount_if()関数とは?使い方と実行例をわかりやすく解説

本記事では、C++ STLにおけるstd::count_if()関数の仕組み、構文、そして具体的な使用例について詳しく解説します。

std::count_if()とは?

std::count_if()は、C++ STLに標準で用意されている関数で、<algorithm>ヘッダーファイル内で定義されています。この関数は、指定された範囲内の要素のうち、特定の条件を満たす要素の個数を取得するために使用されます。戻り値は整数型で、条件を満たした要素の総数が返されます。

この関数は、単に範囲内を反復処理するだけでなく、各要素に対して条件式が真であるかを順番に評価し、条件が真になった回数をカウントして結果として返します。

構文

count_if(start, end, condition);

パラメータ

この関数は、以下のパラメータを受け取ります。

  • start / end(開始・終了イテレータ) − 関数を適用する対象範囲を指定します。startは範囲の先頭位置を、endは範囲の終端位置を示します。
  • condition(条件) − 各要素に対してチェックしたい条件です。単項関数(引数を1つだけ受け取る関数)として定義し、指定範囲内のすべての要素に適用されます。

戻り値

この関数は、与えられた条件を満たす要素の個数(整数値)を返します。

使用例:偶数のカウント

入力例

bool iseve(int i){ return ((i%2)==0); }
int a = count_if( vect.begin(), vect.end(), iseve ); /* vectには1〜10の整数が格納されている */

出力結果

even numbers = 2 4 6 8 10

この例では、1〜10の整数が格納されたベクターvectから、偶数(2, 4, 6, 8, 10)を判定する関数iseveを条件として渡し、条件を満たす要素をカウントしています。

サンプルコード:奇数の個数を数える

#include <bits/stdc++.h>
using namespace std;
bool check_odd(int i){
    if (i % 2 != 0)
        return true;
    else
        return false;
}
int main() {
    vector<int> vec;
    for (int i = 0; i < 10; i++){
        vec.push_back(i);
    }
    int total_odd = count_if(vec.begin(), vec.end(), check_odd);
    cout<<"Number of odd is: "<<total_odd;
    return 0;
}

出力結果

Number of odd is: 5

このコードでは、0〜9の整数をベクターvecに格納し、奇数かどうかを判定するcheck_odd関数を条件として渡しています。0〜9の中で奇数は「1, 3, 5, 7, 9」の5個であるため、出力は「5」となります。

補足:ラムダ式を使った書き方

C++11以降では、ラムダ式を使うことで条件を簡潔に記述できます。

int cnt = count_if(vec.begin(), vec.end(), [](int i){ return i % 2 == 0; });

このように書けば、別途判定用の関数を定義する必要がなく、コードをより読みやすくコンパクトにできます。

  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