Tools.h++ 7.0 クラスライブラリ・リファレンスマニュアル: RWTValSortedVector

バナーをクリックすれば目次に戻ります

Copyright 1999 Rogue Wave Software
Copyright 1999 Sun Microsystems, Inc.

## RWTValSortedVector<T>

### 形式

      #include <rw/tvsrtvec.h>
      RWTValSortedVector<T> sortvec;

  > 注 - 標準 C++ ライブラリがない場合は、ここで説明しているインタフェースを使用してください。標準 C++ ライブラリがある場合は、クラスリファレンスの説明にあるインタフェースを使用してください。

### 説明

  このクラスは順序付きコレクションです。つまり、コレクション内の項目は相互に意味のある順序を保ち、インデックス番号でアクセスできます。オブジェクトは、自分より小さいオブジェクトと自分より大きいオブジェクトとの間に挿入されます (挿入ソート)。項目の重複は許可されています。

  不等号 (<) 演算子によって決められた順序に従って、挿入する項目のコピーをコレクションに格納します。

  クラス `T` には次のものが必要です。

  - コピーの意味の定義 (`T::T(const T&)` または同等のもの)
  - 代入の意味の定義 (`T::operator=(const T&)` または同等のもの)
  - 等価の意味の定義 (`T::operator==(const T&)`)
  - 不等号 (<) の意味の定義 (`T::operator<(const T&)`);
  - デフォルトコンストラクタ

  ソート済みベクトルには、長さ (`length()` か `entries()` が返す項目の数) と容量があります。どんな場合でも容量は長さ以上です。値にもとづくコレクションではコレクションの長さを超えた要素は使用しませんが、そこに存在はしています。クラス `T` の各インスタンスが大量の資源を必要とする場合、コレクションの容量が長さよりずっと大きくならないようにしなければなりません。そうしないと、不要な資源まで確保してしまいます。

  RWTValSortedVector<T> に含まれるオブジェクトを変更することは可能ですが、危険です。RWTValSortedVector<T> をソートされていない状態にし、その変更が `operator<()` と `operator==()` の動作に影響するためです。

### 持続性

  同形

### 例

  次の例では、任意の順序で日付のセットをソート済みベクトルに挿入し、その後それらの日付を順番に出力しています。

      #include <rw/tvsrtvec.h>
      #include <rw/rwdate.h>
      #include <rw/rstream.h>

      {
        RWTValSortedVector<RWDate> vec;

        vec.insert(RWDate(10, "Aug", 1999));
        vec.insert(RWDate(9, "Aug", 1999));
        vec.insert(RWDate(1, "Sept", 1999));
        vec.insert(RWDate(14, "May", 1999));
        vec.insert(RWDate(1, "Sept", 1999));     // 重複して追加する
        vec.insert(RWDate(2, "June", 1999));

        for (int i=0; i<vec.length(); i++)
          cout << vec[i] << endl;
        return 0;
      }

  #### プログラム出力:

      May 14, 1999
      June 2, 1999
      August 9, 1999
      August 10, 1999
      September 1, 1999
      September 1, 1999

### 公開コンストラクタ

      RWTValSortedVector(size_t capac = RWDEFAULT_CAPACITY);

    初期容量が `capac` の空のソート済みのベクトルを作成します。項目数がこの値を超えると、ベクトルは自動的にサイズ変更されます。

### 公開演算子

      T&
      operator()(size_t i);
      const T&
      operator()(size_t i) const;

    ベクトル内の `i` 番目の値を返します。最初に記述した可変要素は左辺値として使用できますが、2 番目に記述したものは使用できません。インデックス `i` は 0 〜 (コレクション内の項目数 -1) の範囲になければなりません。境界検査は行いません。左辺値として使用するときは、コレクションのソート状態に影響しないように注意してください。

      T&
      operator[](size_t i);
      const T&
      operator[](size_t i) const;

    ベクトル内の `i` 番目の値を返します。最初に記述した可変要素は左辺値として使用できますが、2 番目に記述したものは使用できません。インデックス `i` は 0 〜 (コレクション内の項目数 -1) の範囲になければなりません。範囲外にあると RWBoundsError 型の例外が発生します。左辺値として使用するときは、コレクションのソート状態に影響しないように注意してください。

### 公開メンバー関数

      T&
      at(size_t i);
      const T&
      at(size_t i) const;

    ベクトル内の `i` 番目の値を返します。最初の可変要素は左辺値として使用できますが、2 番目の可変要素は使用できません。インデックス `i` は 0 〜 (ベクトル長 -1) の範囲になければなりません。範囲外にあると RWBoundsError 型の例外が発生します。左辺値として使用するときは、コレクションのソート状態に影響しないように注意してください。

      void
      clear();

    コレクションからすべての項目を取り除きます。

      RWBoolean
      contains(const T& a) const;

    `a` と等しい項目がコレクションにあれば `TRUE` を返します。2 分探索を行います。等しいかどうかはクラス定義の等価演算子で判定します。

      const T*
      data() const;

    ベクトルの生データへのポインタを返します。ベクトルの内容を変えてはなりません。この関数の使用には注意を要します。

      size_t
      entries() const;

    現在、コレクションにある項目の数を返します。

      RWBoolean
      find(const T& target, T& ret) const;

    2 分探索を行い、オブジェクト `a` と等しいオブジェクトがベクトルにあれば `TRUE` を返し、そのオブジェクトのコピーを `ret` にセットします。等しいオブジェクトがなければ `FALSE` を返し、`ret` は変わりません。等しいかどうかはクラス定義の等価演算子で判定します。

      const T&
      first() const;

    コレクションの最初の項目を返します。ベクトルが空であると RWBoundsError 型の例外が発生します。

      size_t
      index(const T& a) const;

    2 分探索を行い、`a` と等しい最初の項目のインデックスを返します。等しい項目がなければ `RW_NPOS` を返します。等しいかどうかはクラス定義の等価演算子で判定します。

      void
      insert(const T& a);

    2 分探索を行い、`a` と等しいかそれより小さいすべての項目の後で、かつ、`a` より大きいすべての項目の前に `a` を挿入します。"それより小さいかどうか" は、型 `T` のクラス定義 ``<`` 演算子で判定します。このとき項目数が容量を超えると、コレクションは自動的にサイズ変更されます。

      RWBoolean
      isEmpty() const;

    コレクション内に項目がまったくなければ `TRUE` を、あれば `FALSE` を返します。

      const T&
      last() const;

    コレクション内の最後の項目を返します。コレクションが空であると RWBoundsError 型の例外が発生します。

      size_t
      length() const;

    コレクション内の現在の項目数を返します。

      size_t
      occurrencesOf(const T& a) const;

    2 分探索を行い、`a` と等しい項目の数を返します。等しいかどうかはクラス定義の等価演算子で判定します。

      RWBoolean
      remove(const T& a);

    2 分探索を行い、オブジェクト `a` と等しい最初のオブジェクトを取り除いて `TRUE` を返します。等しいオブジェクトがなければ `FALSE` を返します。等しいかどうかはクラス定義の等価演算子で判定します。

      size_t
      removeAll(const T& a);

    `a` と等しいすべての項目を取り除き、その数を返します。等しいかどうかはクラス定義の等価演算子で判定します。

      T
      removeAt(size_t i);

    インデックス `i` のオブジェクトを取り除き、そのオブジェクトを返します。`i` が無効なインデックスであると RWBoundsError 型の例外が発生します。有効なインデックスの範囲は、0 〜 (リスト内の項目数 -1) です。

      T
      removeFirst();

    コレクション内の最初のオブジェクトを取り除き、それを返します。リストが空であると RWBoundsError 型の例外が発生します。

      T
      removeLast();

    コレクション内の最後のオブジェクトを取り除き、そのオブジェクトを返します。リストが空であると RWBoundsError 型の例外が発生します。

      void
      resize(size_t N);

    コレクションの容量を `N` に変更します。コレクション内のオブジェクト数は変わらず、容量だけが変わります。

### 関連の大域演算子

      RWvostream&
      operator<<(RWvostream& strm,
             const RWTValSortedVector<T>& coll);
      RWFile&
      operator<<(RWFile& strm, const RWTValSortedVector<T>& coll);

    出力ストリーム `strm` にコレクション `coll` を保存するか、すでに保存されている場合は、そのコレクションに対する参照を保存します。

      RWvistream&
      operator>>(RWvistream& strm, RWTValSortedVector<T>& coll);
      RWFile&
      operator>>(RWFile& strm, RWTValSortedVector<T>& coll);

    コレクション `coll` の内容を入力ストリーム `strm` から復元します。

      RWvistream&
      operator>>(RWvistream& strm, RWTValSortedVector<T>*& p);
      RWFile&
      operator>>(RWFile& strm, RWTValSortedVector<T>*& p);

    入力ストリーム `strm` 上の次のオブジェクトを調べて、ヒープから新しいコレクションを作成してそれを指すように `p` を設定するか、または前に読み込んだインスタンスを指すように `p` を設定します。コレクションをヒープから作成した場合、ユーザーはそれを削除する責任があります。