第2章 アル・コワリズミ

 今回から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世紀のアラビアの数学者の名前です。雑学知識としてどうぞ。

 それでは、次回まで。


第1章 業界のスタンダード | 第3章 アル・コワリズミ2

Last update was done on 2001.7.8

この講座の著作権はロベールが保有しています