は、
へのポインターの配列である。
クラスの子孫であれば、
何でもつめることができる。
要素要素で別のクラスであっても良い。
自体、
の子孫なので、
配列要素になれる。
したがって、複雑なネスト構造がつくれる。
は、
、
、
、
、
などの仲間で、
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が非常に参考になる。