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

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

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

## RWTValOrderedVector<T>

### 形式

      #include <rw/tvordvec.h>
      RWTValOrderedVector<T> ordvec;

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

### 説明

  このクラスは、順序付きコレクションです。つまり、コレクション内の項目は相互に意味のある順序を保ち、インデックス番号でアクセスできます。この順序は挿入したときの順序で決まります。項目の重複は許可されています。このクラスはベクトルとして実装されているので、コレクションの最後からは効率良く挿入したり取り出したりすることができますが、コレクションの最初から行うときは少し速度が低下します。

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

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

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

### 持続性

  同形

### 例

      #include <rw/tvordvec.h>
      #include <rw/rstream.h>

      main()  {
        RWTValOrderedVector<double> vec;

        vec.insert(22.0);
        vec.insert(5.3);
        vec.insert(-102.5);
        vec.insert(15.0);
        vec.insert(5.3);

        cout << vec.entries() << " entries\n" << endl;  // "5" を出力する
        for (int i=0; i<vec.length(); i++)
          cout << vec[i] << endl;

        return 0;
      }

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

      5 entries
      22
      5.3
      -102.5
      15
      5.3

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

      RWTValOrderedVector<T>(size_t capac=RWDEFAULT_CAPACITY);

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

      RWTValOrderedVector<T>(const RWTValOrderedVector<T>& c);

    新しい順序付きベクトルを `c` のコピーとして作成します。ベクトルのすべての要素についてコピーコンストラクタを呼び出します。新しいベクトルは、前のベクトルと同じ容量、同じ数のメンバーを持ちます。

### 公開演算子

      RWTValOrderedVector<T>&
      operator=(const RWTValOrderedVector& c);

    自分自身に `c` のコピーを設定します。ベクトルのすべての要素についてコピーコンストラクタを呼び出します。自分自身は、前のベクトルと同じ容量、同じ数のメンバーを持ちます。

      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 型の例外が発生します。

### 公開メンバー関数

      void
      append(const T& a);

    値 `a` をベクトルの最後に追加します。これによって、コレクション内の項目数が容量を超えた場合、コレクションは自動的にサイズ変更されます。

      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` を返します。線形探索を行います。等しいかどうかは、クラス定義の等価演算子で判定します。

      const T*
      data() const;

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

      size_t
      entries() const;

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

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

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

      T&
      first();
      const T&
      first() const;

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

      size_t
      index(const T& a) const;

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

      void
      insert(const T& a);

    値 `a` をベクトルの最後に追加します。この結果、コレクション内の項目数が容量を超えた場合、コレクションのサイズは自動的に変わります。

      void
      insertAt(size_t i, const T& a);

    ベクトル内のインデックス `i` に値 `a` を挿入します。インデックス位置 `i` にあった項目は `i+1` に移り、以降の項目も同様に移動します。この結果コレクション内の項目数が容量を超えた場合、コレクションのサイズは自動的に変わります。インデックス `i` は 0 〜 (ベクトル内の項目数) の範囲になければなりません。範囲外にあると RWBoundsError 型の例外が発生します。

      RWBoolean
      isEmpty() const;

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

      T&
      last();
      const T&
      last() const;

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

      size_t
      length() const;

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

      size_t
      occurrencesOf(const T& a) const;

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

      void
      prepend(const T& a);

    値 `a` をベクトルの最初に追加します。この結果コレクション内の項目数が容量を超えた場合、コレクションのサイズは自動的に変わります。

      RWBoolean
      remove(const T& a);

    線形探索を行い、オブジェクト `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 RWTValOrderedVector<T>& coll);
      RWFile&
      operator<<(RWFile& strm, const RWTValOrderedVector<T>& coll);

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

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

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

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

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