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

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

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

## RWTValSortedVector<T,C>

### 形式

      #include <rw/tvsrtvec.h>
      RWTValSortedVector<T,C> srtvec;

  > 注 - 標準 C++ ライブラリがある場合は、ここで述べるインタフェースを使用します。標準 C++ ライブラリがない場合は、付録 A に記載する RWTValSortedVector に限定されたインタフェースを使用してください。

### 説明

  このクラスは、ベクトルとして実装されている、常時ソートされた、値のコレクションを維持します。

### 持続性

  同形

### 例

  この例では、RWDate のソートされたベクトルを使用しています。

      //
      // tvsvcdat.cpp
      //
      #include <rw/tvsrtvec.h>
      #include <rw/rwdate.h>
      #include <iostream.h>

      main(){
        RWTValSortedVector<RWDate, less<RWDate> > vec;

        vec.insert(RWDate(10, "Aug", 1991));
        vec.insert(RWDate(9, "Aug", 1991));
        vec.insert(RWDate(1, "Sep", 1991));
        vec.insert(RWDate(14, "May", 1990));
        vec.insert(RWDate(1, "Sep", 1991));   // 重複を追加する
        vec.insert(RWDate(2, "June", 1991));

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

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

      05/14/90
      06/02/91
      08/09/91
      08/10/91
      09/01/91
      09/01/91

### 関連クラス

  RWTValSortedDlist<T,C> は、代替の常時ソートされたコレクションです。RWTValOrderedVector<T> は、値のソートされていないベクトルです。

  クラス vector<T,allocator> は、このクラスの基礎となる実装として使用される C++ 標準コレクションです。

### 公開 Typedef

      typedef vector<T,allocator>                    container_type;
      typedef container_type::const_iterator         iterator;
      typedef container_type::const_iterator         const_iterator;
      typedef container_type::size_type              size_type;
      typedef T                                      value_type;
      typedef const T&                               reference;
      typedef const T&                               const_reference;

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

      RWTValSortedVector<T,C>();

    空のベクトルを作成します。

      RWTValSortedVector<T,C>(const vector<T,allocator>& vec);

    `vec` のすべての要素をコピーおよびソートすることによって、ベクトルを作成します。

      RWTValSortedVector<T,C>(const RWTValSortedVector<T,C>& rwvec);

    コピーコンストラクタ。

      RWTValSortedVector<T,C>(size_type n, const T& val);

    それぞれが `val` に初期化された `n` 個の要素を持つベクトルを作成します。

      RWTValSortedVector<T,C>(size_type n);

    `n` 個の要素の容量を持つ空のベクトルを作成します。

      RWTValSortedVector<T,C>(const T* first, const T* last);

    `first` が指す `T` の配列から `last` が指す要素まで (ただし、その要素は含みません)、要素をコピーおよびソートすることによって、ベクトルを作成します。

### 公開メンバー演算子

      bool
      operator<(const RWTValSortedVector<T,C>& vec) const;
      bool
      operator<(const vector<T,allocator>& vec) const;

    自分自身が辞書形式で `vec` より小さい場合は `TRUE` を返し、等しいか大きい場合は `FALSE` を返します。型 `T` には明確に規定された less-than 意味論 (`T::operator<(const T&)` または同等のもの) があると仮定します。

      bool
      operator==(const RWTValSortedVector<T,C>& vec) const;
      bool
      operator==(const vector<T,allocator>& vec) const;

    自分自身が `vec` と等しい場合は `TRUE` を返し、それ以外の場合は `FALSE` を返します。2 つのコレクションのエントリ数が同じで、両方のコレクションを反復したときに個々の要素が互いに等しい場合、両者は等しいと言えます。

      reference
      operator()(size_type i);
      const_reference
      operator()(size_type i) const;

    自分自身の `i` 番目の要素への参照を返します。インデックス `i` は、0 〜 (エントリ数 -1) の範囲でなければなりません。それ以外の場合の結果は定義されていません。境界検査は実行されません。

      reference
      operator[](size_type i);
      const_reference
      operator[](size_type i) const;

    自分自身の `i` 番目の要素への参照を返します。インデックス `i` は、0 〜 (自分自身のエントリ数 -1 ) の範囲内でなければなりません。それ以外の場合、この関数は、型 RWBoundsErr の例外を送出します。

### 公開メンバー関数

      void
      apply(void (*fn)(const_reference,void*), void* d) const;

    `fn` が指すユーザー定義関数を、コレクション内の各項目に適用します。この関数は、次のプロトタイプの 1 つを持っていなければなりません。

         void yourfun(const_reference a, void* d);

    クライアントデータは、パラメタ `d` を通して渡すことができます。

      reference
      at(size_type i);
      const_reference
      at(size_type i) const;

    自分自身の `i` 番目の要素への参照を返します。インデックス `i` は、0 〜 (自分自身のエントリ数 -1 ) の範囲内でなければなりません。それ以外の場合、この関数は、型 RWBoundsErr の例外を送出します。

      iterator
      begin();
      const_iterator
      begin() const;

    自分自身内の最初の要素の位置にある反復子を返します。

      void
      clear();

    自分自身から項目をすべて削除することによって、コレクションを消去します。各項目のデストラクタを呼び出します。

      bool
      contains(const_reference a) const;

    自分自身内に式 `(t==a)` が `TRUE` になるような要素 `t` が存在する場合は `TRUE` を返し、それ以外の場合は `FALSE` を返します。

      bool
      contains(bool (*fn)(const_reference,void*), void* d) const;

    自分自身内に式 `((*fn)(t,d))` が `TRUE` になるような要素 `t` が存在する場合は、`TRUE` を返します。それ以外の場合は、`FALSE` を返します。`fn` が指すユーザー定義テスター関数は、次のプロトタイプを持っていなければなりません。

         bool yourTester(const_reference a, void* d);

    クライアントデータは、パラメタ `d` を通して渡すことができます。

      const T*
      data();

    ベクトルの最初の要素へのポインタを返します。

      iterator
      end();
      const_iterator
      end() const;

    自分自身内の最後の要素の「直後」にある反復子を返します。

      size_type
      entries() const;

    自分自身内の項目数を返します。

      bool
      find(const_reference a, value_type& k) const;

    自分自身内に式 `(t == a)` が `TRUE` になるような要素 `t` が存在する場合は、`t` を `k` に代入し、`TRUE` を返します。それ以外の場合は、`FALSE` を返し、`k` の値は変更しません。

      bool
      find(bool (*fn)(const_reference,void*), void* d,
           value_type& k) const;

    自分自身内に式 `((*fn)(t,d))` が `TRUE` になるような要素 `t` が存在する場合は、`t` を `k` に代入し、`TRUE` を返します。それ以外の場合は、`FALSE` を返し、`k` の値は変更しません。`fn` が指すユーザー定義テスター関数は、次のプロトタイプを持っていなければなりません。

         bool yourTester(const_reference a, void* d);

    クライアントデータは、パラメタ `d` を通して渡すことができます。

      reference
      first();
      const_reference
      first() const;

    自分自身内の最初の要素への参照を返します。

      size_type
      index(const_reference a) const;

    式 `(t == a)` が `TRUE` になるような自分自身内の最初の項目 `t` の位置を返します。そのような項目が存在しない場合は、静的メンバー `npos` を返します。

      size_type
      index(bool (*fn)(const_reference,void*), void* d) const;

    式 `((*fn)(t,d))` が `TRUE` になるような自分自身内の最初の項目 `t` の位置を返します。そのような項目が存在しない場合は、静的メンバー `npos` を返します。`fn` が指すユーザー定義テスター関数は、次のプロトタイプを持っていなければなりません。

         bool yourTester(const_reference a, void* d);

    クライアントデータは、パラメタ `d` を通して渡すことができます。

      bool
      insert(const_reference a);

    項目 `a` を自分自身に追加します。コレクションはソートされたままです。`TRUE` を返します。

      size_type
      insert(const vector<T,allocator>& a);

    `a` のすべての要素を自分自身に挿入します。コレクションはソートされたままです。挿入された項目数を返します。

      bool
      isEmpty() const;

    コレクション内に項目が存在しない場合は `TRUE` を返し、それ以外の場合は `FALSE` を返します。

      bool
      isSorted() const;

    使用する比較子オブジェクトに関してコレクションがソートされている場合は `TRUE` を返し、それ以外の場合は `FALSE` を返します。

      const_reference
      last() const;

    コレクション内の最後の項目への参照を返します。

      size_type
      length() const;

    最初に大きさを変更せずに自分自身内に格納できる要素の最大数を返します。

      size_type
      merge(const RWTValSortedVector<T,C>& dl);

    ソート順序を維持したまま、`dl` のすべての要素を自分自身に挿入します。

      size_type
      occurrencesOf(const_reference a) const;

    式 `(t == a)` が `TRUE` になるような自分自身内の要素 `t` の数を返します。

      size_type
      occurrencesOf(bool (*fn)(const_reference,void*),
                    void* d) const;

    式 `((*fn)(t,d))` が `TRUE` になるような自分自身内の要素 `t` の数を返します。`fn` が指すユーザー定義テスター関数は、次のプロトタイプを持っていなければなりません。

         bool yourTester(const_reference a, void* d);

    クライアントデータは、パラメタ `d` を通して渡すことができます。

      bool
      remove(const_reference a);

    式 `(t == a)` が `TRUE` になるような自分自身内の最初の要素 `t` を削除し、`TRUE` を返します。そのような要素が存在しない場合は、`FALSE` を返します。

      bool
      remove(bool (*fn)(const_reference,void*), void* d);

    式 `((*fn)(t,d))` が `TRUE` になるような自分自身内の最初の要素 `t` を削除し、`TRUE` を返します。そのような要素が存在しない場合は、`FALSE` を返します。`fn` が指すユーザー定義テスター関数は、次のプロトタイプを持っていなければなりません。

         bool yourTester(const_reference a, void* d);

    クライアントデータは、パラメタ `d` を通して渡すことができます。

      size_type
      removeAll(const_reference a);

    式 `(t == a)` が `TRUE` になるような自分自身内の要素 `t` をすべて削除します。削除した項目数を返します。

      size_type
      removeAll(bool (*fn)(const_reference,void*), void* d);

    式 `((*fn)(t,d))` が `TRUE` になるような自分自身内の要素 `t` をすべて削除します。削除した項目数を返します が指すユーザー定義テスター関数は、次のプロトタイプを持っていなければなりません。

         bool yourTester(const_reference a, void* d);

    クライアントデータは、パラメタ `d` を通して渡すことができます。

      value_type
      removeAt(size_type i);

    自分自身内の位置 `i` にある項目を削除して返します。この位置は 0 〜 (コレクション内のエントリ数 -1) の範囲内でなければなりません。それ以外の場合、この関数は、型 RWBoundsErr の例外を送出します。

      value_type
      removeFirst();

    コレクション内の最初の項目を削除して返します。

      value_type
      removeLast();

    コレクション内の最後の項目を削除して返します。

      void
      resize(size_type n);

    必要に応じて、ベクトルの容量を最低でも `n` に修正します。

      vector<T,allocator>&
      std();
      const vector<T,allocator>&
      std() const;

    自分自身に対する実装として使用される、基礎となる C++ 標準コレクションへの参照を返します。コレクション内で要素の順序に違反しないようにすることは、ユーザーの責任です。

### 静的公開データメンバー

      const size_type  npos;

    これは、`index` などのメンバー関数によって無効な位置を示すために返される値です。この値は、`~(size_type)0` と同じです。

### 関連の大域演算子

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

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

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

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

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

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