第79章 setクラス


今回はsetクラスをやります。使い方はvectorクラスと似ています。 データはソートされて蓄えられていきます。



では、簡単なサンプルを見てみましょう。

// set01.cpp

#include <iostream>
#include <set>

using namespace std;

int main()
{
    set<int>s;
    int no;

    while (1) {
        cout << "文字列入力(999で終了)---";
        cin >> no;
        if (no == 999)
            break;
        s.insert(no);
    }
    
    cout << (int)s.size() << "個のデータがあります" << endl;
    set::iterator p;
    for (p = s.begin(); p != s.end(); p++)
        cout << *p << endl;

    return 0;
}
まず、sets;というようにsetクラスのオブジェクトsを宣言します。 これに、データを追加するにはinsertメンバ関数を使います。

反復子の宣言も同じで

set<int>::iterator p;
で反復子pが宣言されました。

このままではpが何を指しているのかわからないので

p = s.begin();
とすれば、ソートされた最初のデータを指すことになります。
p = s.end();
とすれば、pは最後のデータ(と言うか、最後のさらに1つ後ろ)を指していますね。
p = p + 1;
とすれば、pは次のデータを指します。 pの指している内容は*pです。

反復子の使い方は、ポインタと非常によく似ています。 また、pがデータの存在しない範囲を指していても、コンパイラは警告してくれませんので、注意してください。

では、このプログラムを実行してみましょう。

入力したデータがソートされて、出力されていますね。

でも、よく見てください。 入力したデータは7個のはずなのに、出力されたデータは5個です。 これは、どうしたことでしょうか。 実は、「100」を3回入力していますね。同じものを入力すると、まとめて1個とみなされるのです。




[C++Index] [総合Index] [Previous Chapter] [Next Chapter]

Update Jun/28/2004 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。