今回から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
この講座の著作権はロベールが保有しています