C++でSTLを使って配列の積を求める方法
C++では、STL(標準テンプレートライブラリ)のaccumulate関数を利用することで、配列内のすべての要素の積を簡潔に求めることができます。ここでは、その具体的な実装例を紹介します。
アルゴリズム
開始 配列の各要素の値を初期化する。 ユーザー定義関数 accumulate を呼び出し、配列全体の積を取得する。 計算結果を出力する。 終了
サンプルコード
#include <iostream>
#include <numeric>
using namespace std;
int ProductOfArray(int p[], int n) {
return accumulate(p, p + n, 1, multiplies<int>());
}
int main() {
int m[] = {6, 7};
int n = sizeof(m) / sizeof(m[0]);
cout << "Product of the Array is:" << ProductOfArray(m, n);
}
コードの解説
accumulate 関数は、<numeric> ヘッダーで定義されており、指定した範囲 [p, p + n) の各要素に対して演算を順番に適用し、その結果を返します。第3引数の 1 は計算の初期値であり、第4引数の multiplies<int>() は乗算を行うファンクタ(関数オブジェクト)です。これにより、配列の全要素が掛け合わされ、積が求められます。
また、sizeof(m) / sizeof(m[0]) という式を使うことで、配列の要素数を動的に算出しています。この手法は、配列のサイズが変更されてもコードを修正する必要がないため便利です。
実行結果
Product of the Array is:42
この例では、配列の要素が 6 と 7 のため、6 × 7 = 42 が出力されます。同様の手順で、任意の個数の整数からなる配列の積も簡単に計算できます。
-
【C++】配列内のすべての素数の積を求める方法
整数型配列 arr[] が与えられたとき、その配列に含まれるすべての素数を見つけ出し、それらの積を計算するのが本記事のテーマです。素数とは、1とその数自身でしか割り切れない正の整数のことです。たとえば、2、3、5、7、11などが素数に該当します。それでは、次の配列を例に解を求めてみましょう。入力: arr[] = { 11, 20, 31, 4, 5, 6, 70 }出力: 1705説明: 配列内の素数は 11、31、5 の3つであり、その積は 11 × 31 × 5 = 1705 となります。入力: arr[] = { 1, 2, 3, 4, 5, 6, 7 }出力: 210説明: 配列内の
-
C++のnew演算子を使って2次元配列を動的に宣言・生成する方法
動的な2次元配列とは、基本的に「配列へのポインタ」を要素とする配列(ポインタの配列)のことです。つまり、各行が独立した1次元配列としてヒープ上に確保され、それらの先頭アドレスを格納するポインタ配列によって全体が管理されます。下図は、3×4の2次元配列のイメージです。アルゴリズムC++のnew演算子で2次元配列を動的に確保する手順は以下の通りです。Begin 配列の寸法(行数・列数)を宣言する。 new を使って 2次元配列 a[][] を動的に確保する。 配列に要素を代入する。 配列の内容を出力する。 delete でメモリを解放する。 Endサンプルコ