では、簡単なサンプルを見てみましょう。
// 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まず、set::iterator p; for (p = s.begin(); p != s.end(); p++) cout << *p << endl; return 0; }
反復子の宣言も同じで
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個とみなされるのです。
Update Jun/28/2004 By Y.Kumei