【C++】STLのcount_if()を使って配列内の奇数・偶数の要素数を検索する方法
配列が与えられたとき、C++の標準テンプレートライブラリ(STL)を活用して、その配列に含まれる奇数と偶数の要素の個数を求めることを考えます。
この問題を解決するために、STLに用意されているcount_if()関数を使用します。
count_if()関数とは
count_if()は、指定した条件(述語)を満たす要素の個数を、指定された範囲内から数え上げて返すアルゴリズム関数です。
構文
count_if(LowerBound, UpperBound, function)
説明 − この関数は、指定された条件を満たす配列内の要素の個数を返します。3つの引数を受け取ります。
- 下限(LowerBound) − 配列やその他のシーケンスの最初の要素を指します。
- 上限(UpperBound) − 配列やその他のシーケンスの最後の要素を指します。
- 関数(function) − 指定された条件に基づいてブール値(true/false)を返します。
入力例と出力例
入力:array[] = {2, 4, 1, 5, 8, 9}
出力:奇数の要素は 1、5、9 の3個
偶数の要素は 2、4、8 の3個
入力:array[] = {1, 2, 3, 4, 5, 10}
出力:奇数の要素は 1、3、5 の3個
偶数の要素は 2、4、10 の3個プログラムのアプローチ
- 整数型の配列に整数値を格納します。
- 配列の要素が奇数かどうかを判定するbool型の関数を作成します。選択した要素が奇数であれば、残りの要素はすべて偶数であると判断できます。
- 配列の先頭要素・末尾要素および判定用関数を引数としてcount_if()を呼び出し、条件を満たす要素数を取得します。
C++サンプルコード
#include <bits/stdc++.h>
using namespace std;
// 要素が奇数かどうかを判定する関数
bool check(int i) {
if (i % 2 != 0)
return true;
else
return false;
}
int main() {
int arr[] = { 2, 10, 1, 3, 7, 4, 9 };
int size = sizeof(arr) / sizeof(arr[0]);
// 奇数の個数をカウント
int temp = count_if(arr, arr + size, check);
cout << "Odds are : " << temp << endl;
cout << "Evens are : " << (size - temp) << endl;
return 0;
}実行結果
上記のコードを実行すると、次の出力が得られます。
Odds are : 4 Evens are : 3
このように、全体の要素数から奇数の個数を差し引けば偶数の個数も求められるため、判定用の関数は「奇数かどうか」の1つだけで十分です。
補足:ラムダ式を使ったより簡潔な書き方
C++11以降では、判定用の関数を別途定義しなくても、ラムダ式を直接渡すことでコードをより簡潔にできます。
int odds = count_if(arr, arr + size, [](int i) { return i % 2 != 0; });この1行で奇数の個数を取得でき、可読性の面でも優れています。
-
C++の配列における偶数インデックスと奇数インデックス要素の絶対差を求める方法
配列と絶対差とは 配列(Array)とは、同じデータ型の複数の要素をまとめて格納できるコンテナです。要素のインデックスは0から始まり、最初の要素がインデックス0に対応します。 本記事では、偶数インデックスの要素同士、および奇数インデックスの要素同士の絶対差を求める方法を解説します。 偶数インデックス:0, 2, 4, 6, 8 … 奇数インデックス:1, 3, 5, 7, 9 … 絶対差とは、2つの値の差の絶対値(|a − b|)のことです。たとえば、15と7の絶対差は |15 − 7| = 8 となります。 問題の例 入力:arr = {1, 2, 4, 5, 8} 出力: 偶数インデ
-
C++で配列の偶数・奇数インデックス要素の絶対差を求める方法
この記事では、配列内の偶数インデックスと奇数インデックスにある要素の絶対差を求める方法を解説します。絶対差とは、2つの値の差が負になった場合にも絶対値を取ることを指します。 例として、配列 {1, 2, 3, 4, 5, 6, 7, 8, 9} を考えてみましょう。インデックスは0から始まるため、各要素は次のように分類されます。 偶数インデックス(0, 2, 4, 6, 8)の要素:1, 3, 5, 7, 9奇数インデックス(1, 3, 5, 7)の要素:2, 4, 6, 8 計算の手順 まず初期値0から出発し、該当するインデックスの要素を順番に見ながら、直前の累積値との差の絶対値を求めていき