は、 へのポインターの配列である。 クラスの子孫であれば、 何でもつめることができる。 要素要素で別のクラスであっても良い。 自体、 の子孫なので、 配列要素になれる。 したがって、複雑なネスト構造がつくれる。 は、、 、 、、 などの仲間で、 Collection とか Container とか呼ばれている。
普通の配列でなく、 を使う利点はいろいろある。 配列に要素を加えていく( メソッドを使う)際に、 配列が小さければ自動的に拡張してくれる。 また、 メソッドで、要素を削除したり、 削除後空いたところを したりできる。 配列要素を一括して できる ( メソッドを使う)。 、 または 、 など配列要素にアクセスする標準的なインターフェースが提供されている。 要素の並べ代えも簡単にできる。
使い方は、
TObjString os1("hoge"); TObjString os2("hogehoge"); TObjString os3("owari"); TObjArray oa(1); // 大きさ 1 の配列を作成 oa.Add(os1); // 配列に os1 を入れる oa.Add(os2); // 配列に os2 を追加 oa.Add(os3); // 配列に os3 を追加 TObjString *sp = (TObjString *)oa[0]; // s1 を取得(cast が必要) oa.Remove(s2); // s2 を削除 TIter next(oa); // iterator の作成 while((sp = (TObjString *)next())) { // cast が必要 cout << sp << endl; // s2 はプリントされない } cout << oa[1] << endl; // oa[1] はいない(怒られる) oa.Compress(); // 圧縮 cout << oa[1] << endl; // "owari" をプリント(怒られない)配列の拡張は時間がかかるので、 普通は最初に十分な大きさの領域を確保する。 また、決まった大きさの要素の配列に対しては、 を使うのが経済的である。 さらに使い方を学ぶには
$ROOTSYS/test/tcollex.cxxが非常に参考になる。