C++のtransform()関数とは?単項演算・二項演算モードの使い方を解説
transform()関数は、C++のSTL(標準テンプレートライブラリ)に含まれる便利なアルゴリズムの一つです。使用する際は、<algorithm>ヘッダーファイルをインクルードする必要があります。この関数を使うと、配列やコンテナ内のすべての要素に対して、まとめて同じ操作を適用できます。例えば、「配列の各要素を2乗して、結果を別の配列に格納したい」といった場合にtransform()関数が役立ちます。
transform()関数には、主に次の2つの動作モードがあります。
- 単項演算(Unary operation)モード
- 二項演算(Binary operation)モード
単項演算モード
このモードでは、1つの入力範囲と、各要素に適用する演算(または関数)を指定します。指定した関数が各要素に対して順番に呼び出され、その戻り値が出力先へ書き込まれます。最も基本的な使い方です。
サンプルコード
#include <iostream>
#include <algorithm>
using namespace std;
int square(int x) {
// 2乗を計算して返す関数
return x * x;
}
int main(int argc, char **argv) {
int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int res[10];
transform(arr, arr+10, res, square);
for(int i = 0; i < 10; i++) {
cout << res[i] << "\n";
}
}
実行結果
1 4 9 16 25 36 49 64 81 100
二項演算モード
このモードでは、2つの入力範囲の対応する要素同士に対して二項演算を実行できます。例えば、異なる2つの配列の要素をそれぞれ掛け合わせたり、足し合わせたりしたい場合に、この二項演算モードを使用します。呼び出し形式は「transform(第一入力の先頭, 第一入力の末尾, 第二入力の先頭, 出力先, 演算関数)」となります。
サンプルコード
#include <iostream>
#include <algorithm>
using namespace std;
int multiply(int x, int y) {
// 積を計算して返す関数
return x * y;
}
int main(int argc, char **argv) {
int arr1[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
int arr2[10] = {54, 21, 32, 65, 58, 74, 21, 84, 20, 35};
int res[10];
transform(arr1, arr1+10, arr2, res, multiply);
for(int i = 0; i < 10; i++) {
cout << res[i] << "\n";
}
}
実行結果
54 42 96 260 290 444 147 672 180 350
-
C++で2次元配列を関数に渡す方法
C++では、配列をそのまま関数の引数として渡すことができます。本記事では、2次元配列を関数に引き渡して、その要素をすべて表示するプログラムを紹介します。 アルゴリズム Begin 2次元配列 n[][] を関数 show() に渡す。 show() 関数内で、二重の for ループ(ネストされたループ)を使って配列 n の全要素を走査する。 End サンプルコード #include <iostream> using namespace std; void show(int n[4][3]); int main() { int n[4][3] = {
-
【C++入門】配列を関数に渡す3つの方法をわかりやすく解説
C++では、配列全体をそのまま関数の引数として渡すことはできません。しかし、インデックスを付けずに配列名を指定することで、配列へのポインタを渡すことができます。これは「配列名は先頭要素へのポインタに読み替えられる(配列の減衰)」というC++の仕組みによるものです。1次元配列を関数の引数として渡したい場合は、以下の3つのいずれかの方法で関数の仮引数を宣言します。どの方法でも、コンパイラに対して「整数型のポインタを受け取る」という情報が伝わるため、動作結果はすべて同じになります。配列を関数に渡す3つの宣言方法1. ポインタとして仮引数を宣言するvoid myFunction(int *param)