今回からSTLについて話していきたいと思います。先ず初めの今回は「アルゴリズム」についてです。
以下が今回の要点です。
では、いってみましょう。
今回からずずずっとSTLについて話していくわけですが、STLがどういうものなのかを話す前にちょっとSTLを使ってみましょう。
| プログラム1 |
|---|
// Algo1.cpp
#include <iostream>
#include <algorithm>
using namespace std;
#define numof(array) (sizeof (array) / sizeof *(array))
int main()
{
int data[] = { 4, 2, 9, 7, 1, };
cout << *min_element(data, data + numof(data)) << endl;
return 0;
} |
| 実行結果 |
1 |
この min_element というのはSTLの関数テンプレートの1つで、配列の中で一番小さい要素のアドレスを返す関数テンプレートです。引数には先頭位置と先頭位置+要素数 を渡しています。何ということもない処理ですね。ヘッダファイルは algorithm です。
この処理がなぜ関数でなく関数テンプレートとして作られているかというのは、どんな型の配列にでも使えるようにするためです。
このくらいならちょっと作ってみることもできそうですね。では、作ってみましょう。
| プログラム2 |
|---|
// Algo2.cpp
#include <iostream>
using namespace std;
#define numof(array) (sizeof (array) / sizeof *(array))
template <typename TYPE>
TYPE min_element(TYPE pBegin, TYPE pEnd)
{
TYPE pMin;
for(TYPE p = pMin = pBegin; p != pEnd; ++p)
if(*p < *pMin)
pMin = p;
return pMin;
}
int main()
{
int data[] = { 4, 2, 9, 7, 1, };
cout << *min_element(data, data + numof(data)) << endl;
return 0;
} |
| 実行結果 |
1 |
はい。同じ動作をしますね。
STLというのは、こんな風にテンプレートを駆使しまくったライブラリなわけです。型を気にせず使えるという点が非常に魅力的なわけです。
STLは「アルゴリズム」「関数オブジェクト」「コンテナ・イテレータ」「スマートポインタ」など、いろいろなものから成り立っています。それぞれがどういうものかは今は話しませんが、今回使った「アルゴリズム」に関してはちょっと話したいと思います。
今回使った min_element という関数テンプレートは「アルゴリズム」と呼ばれるものの1つです。アルゴリズムというと、普通は「ある目的を果たすための処理の方法」といった意味ですが、STLの言う「アルゴリズム」はちょっと違います。STLの言うアルゴリズムとは「配列のようなものに対するループ処理を行う関数テンプレート」のことなのです。
大仰な名前が付いていますが、中身は上のようにたいしたものではありません(ものにもよりますが)。とにかく、for ループでぐるぐるーっとやったのがアルゴリズムなわけです。
いろいろまだいいたいこともありますが、長くなるので次回に回したいと思います。
では、今回の要点です。
タイトルの「アル・コワリズミ」というのは、アルゴリズムの語源となった9世紀のアラビアの数学者の名前です。雑学知識としてどうぞ。
それでは、次回まで。
Last update was done on 2001.7.8
この講座の著作権はロベールが保有しています