2014年3月21日金曜日

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





第二弾は、イテレータ(反復子)の話です。


イテレータとは、コンテナオブジェクトにある


 iterator クラスのオブジェクトで



これを使うと、コンテナオブジェクトの中のデータに同じように

アクセスできるようになります(^^;)

つまり、配列でもリストでも同じアクセス方法になる、ということです。

iterator オブジェクトは、各コンテナオブジェクト用のものがあり、

その中の1つの要素を指します。

では、いつものようにサンプルプログラムです。

#include <iostream>
#include <vector>

using namespace std;

int main(void)
{
    vector<int> nVec;

    nVec.push_back(5);
    nVec.push_back(10);
    nVec.push_back(15);
    nVec.push_back(20);

    // vectorクラスでイテレータを使う場合の宣言方法に注目
    vector<int>::iterator itr_first, itr_last, i;

    itr_first = nVec.begin();  // 最初の要素をイテレータに代入
    itr_last = nVec.end();     // 最後の要素をイテレータに代入

    cout << "要素数は " << (int)nVec.size() << " です。" << endl;

    cout << "すべて出力してみます。" << endl;
    // 要素を取り出すのにイテレータでカウンタを操作
    for (i = itr_first; i != itr_last; i++) {
        cout << *i << endl;    // イテレータから値を参照しています。
    }                               // ポインタのようですね(^^;)

    return 0;
}

実行結果
# ./test
要素数は 4 です。
すべて出力してみます。
5
10
15
20


このように、ちょっと使うだけでもSTLの素晴らしさが分かります(^^)

開発を効率化する便利なものはどんどん使ってものです...


今日の名言
一年前にあなたが悩んでいた事柄を思い出していただきたい。どうやってそれを
切り抜けただろうか。そうした悩み事ばかり気にかけて、エネルギーを
浪費しなかっただろうか。結局そうした悩みは、ほとんどが取り越し苦労だった
のではないか?
                               デール・カーネギー

今日行いたい善行があれば、すぐに実行せよ。決して明日まで延ばすな。
                               ジェフリー・チョーサー

現在我々が経験している時間と状況は、それまでの時間と状況が積もり積もって
出来た結果である。これは大自然がこれまでに振り出した、あるいは
振り出すことのできる、最上の賽の目である。
                               ラルフ・ワルド・エマーソン

何より大事なことだが、我々は現在にしか生きられないのだ。過去を顧み、
人生の一瞬たりとも無為に過ごしたことはなかったと言いきれる者は、
最も幸福な人間である。
                               ヘンリー・デイヴィッド・ソロー