2014年3月14日金曜日

C++ 標準テンプレートライブラリ 其の壱(1/2)






今回はC++の標準テンプレートライブラリ

Standard Template Library についての話です。






標準テンプレートライブラリとは、配列、リスト、キューのような複数のデータを

管理したい場合に、その実装に頭を悩ませることなしに利用できる

大変便利なクラスやアルゴリズムの集合です。(^^)

また、複数のデータを格納して管理するオブジェクトのことを

コンテナオブジェクトといいます。

一例として次のようなものがあります。

  • 配列      vector
  • リスト     list
  • キュー    queue
  • スタック  stack
  • 集合      set

まだ、他にも色々ありますが、ここで全て扱うには難しい内容ですし

割愛させていただきます...(^^;)

あれこれ難しいことを考える必要がないし、汎用的で高機能という

素晴らしさを兼ね備えているのですが、メモリ制約がある組み込み

ソフトウェア開発においては、当然使えません...(-_-;)残念

そんなわけですが、例によって簡単なプログラムを用意しました。

今回は、vectorクラスを使ってみます。(^^)

これのスゴいところは、メモリが足りない時に自動的にメモリを

確保することです。

#include <iostream>    // vectorクラスを使います
#include <vector>

using namespace std;

int main(void)
{
    vector<int> nVec;    // int型のvectorオブジェクトを生成

    nVec.push_back(5);    // データを格納しています...
    nVec.push_back(10);
    nVec.push_back(15);

    // これで要素のサイズが分かります
    cout << "要素数は " << (int)nVec.size() << " です。" << endl;
 
    // 中身を確認してみましょう
    for (int i = 0; i < (int)nVec.size(); i++) {
       // 通常の配列と同じようにアクセスできます:-)
        cout << "vectoro[" << i << "] = " << nVec[i] << endl;
    }

    return 0;
}

実行結果
# ./test
要素数は 3 です。
vectoro[0] = 5
vectoro[1] = 10
vectoro[2] = 15


最初に配列の要素を決めなくてよいとは、何と便利...

しかも、動的にメモリ確保してることを全く意識させませんね。

いやぁ、STLを使えるってホントに素晴らしいですね(^-^)


今日の名言
結局のところ、最悪の不幸は決して起こらない。たいていの場合、
不幸を予期するから悲惨な目に合うのだ。
                           オノレ・ド・バルザック

一日を顧みて、どこかおもしろかった、楽しかった、本当に満足だったという
ところがなければ、その一日は無駄に過ごしたことになる。私にとって、
それは神に背くことであり、よこしまなことなのだ。
                           ドワイト・D・アイゼンハワー

最悪の事柄を受け入れてしまえば、もはや失うものはなくなる。
裏を返して言えば、どう転んでも儲けものなのだ!
                           デール・カーネギー

時間を浪費するな、人生は時間の積み重ねなのだから。
                           ベンジャミン・フランクリン