C++のSTLを使って配列内のNで割り切れる要素を検索する方法
配列が与えられ、その中からNで割り切れる要素を見つけ出すことが課題です。この問題は、C++の標準テンプレートライブラリ(STL)に用意されているcount_if()関数を使うことで簡単に解決できます。
count_if()関数とは?
count_if()は、指定された条件を満たす配列内の要素の個数を返す関数です。条件の判定には、ユーザーが定義した関数やラムダ式を渡すことができます。
構文
count_if(LowerBound, UpperBound, function)
パラメータの説明
- 下限(Lower Bound) − 配列やその他のシーケンスの先頭要素を指します。
- 上限(Upper Bound) − 配列やその他のシーケンスの末尾要素を指します。
- 関数(Function) − 指定された条件に基づいてブール値(true / false)を返します。
入出力例
入力: array[] = {2, 4, 1, 5, 8, 9}
N = 4
出力: 4で割り切れる要素の個数: 2
入力: array[] = {1, 2, 3, 4, 5, 10}
N = 2
出力: 2で割り切れる要素の個数: 3
プログラムのアプローチ
- 整数型の配列に整数値を格納します。
- 配列の各要素が、ユーザーが指定した値Nで割り切れるかどうかを判定するbool型の関数を作成します。
- 先頭要素・末尾要素・判定用関数を引数として受け取るcount_if()関数を呼び出し、条件を満たす要素の個数を取得します。
サンプルコード
#include <bits/stdc++.h>
using namespace std;
int n;
// 要素がnで割り切れるかどうかを判定する関数
bool check(int i) {
if (i % n == 0)
return true;
else
return false;
}
int main() {
int arr[] = {2, 4, 1, 5, 8, 9};
n = 4;
int size = sizeof(arr) / sizeof(arr[0]);
int temp = count_if(arr, arr + size, check);
cout<<"Elements divisible by "<<n<< ": " <<temp;
return 0;
}
実行結果
上記のコードを実行すると、次のような出力が得られます。
Elements divisible by 4: 2
このように、count_if()を活用すれば、ループを自分で書くことなく、条件を満たす要素の個数を簡潔に数えることができます。なお、C++11以降ではラムダ式を使えば、グローバル変数に頼らずに同様の処理をより安全に実装することも可能です。
-
C++ STLのset find()関数の使い方を解説
C++ STLのsetコンテナにおけるfind()関数は、指定した要素を検索し、その要素を指すイテレータを返します。もし要素がセット内に存在しない場合は、最後の要素の直後の位置(つまりend()が返すイテレータ)を指す値が返されます。この関数の計算量はO(log n)であり、setが内部的に平衡二分探索木(赤黒木)で実装されているため、高速な検索が可能です。アルゴリズムBegin セットコンテナの要素を出力するための関数 printS() を定義する。 空のセットコンテナ s を初期化し、いくつかの要素を挿入する。 関数を呼び出して、セットコンテナの要素を出力する。
-
C++でSTLを使って配列の積を求める方法
C++では、STL(標準テンプレートライブラリ)のaccumulate関数を利用することで、配列内のすべての要素の積を簡潔に求めることができます。ここでは、その具体的な実装例を紹介します。 アルゴリズム 開始 配列の各要素の値を初期化する。 ユーザー定義関数 accumulate を呼び出し、配列全体の積を取得する。 計算結果を出力する。 終了 サンプルコード #include <iostream> #include <numeric> using namespace std; int ProductOfArray(int p[], int n)