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

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

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

## RWTValSlist<T>

### 形式

      #include <rw/tvslist.h>
      RWTValSlist<T> list;

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

### 説明

  このクラスは一重リンクリストとして実装され、値のコレクションを保守します。これは値にもとづくリストです。リストを構築するリンクにオブジェクトをコピーしたり取り出したりします。侵入的リスト (「RWTIsvSlist<T>」を参照) と異なり、オブジェクトをリンククラスから継承する必要はありません。ただし、挿入のたびにヒープから新しいリンクを割り当てて、そのリンクにオブジェクトをコピーする必要があるので、侵入的リストよりも多少効率が悪くなります。

  パラメータ `T` はリスト内に挿入されるオブジェクトの型を表すもので、クラスまたは組み込み型です。クラス T には次のものが必要です。

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

### 持続性

  同形

### 例

  次の例は、`RWDates` の一重リンクリストを処理しています。

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

      main()  {
        RWTValSlist<RWDate> dates;
        dates.insert(RWDate(2, "June", 52));     // 6/2/52
        dates.insert(RWDate(30, "March", 46));   // 3/30/46
        dates.insert(RWDate(1, "April", 90));    // 4/1/90

        // 日付の 1 つを探す
        RWDate ret;
        if (dates.find(RWDate(2, "June", 52), ret)){
          cout << "Found date " << ret << endl;
        }

        // 逆順に取り除く
        while (!dates.isEmpty())
          cout << dates.removeLast() << endl;

        return 0;
      }

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

      Found date June 2, 1952
      April 1, 1990
      March 30, 1946
      June 2, 1952

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

      RWTValSlist<T>();

    空のリストを作成します。

      RWTValSlist<T>(const RWTValSlist<T>& list);

    リスト `list` のコピーを作成します。コピーコンストラクタ `T` の性質上、リスト内のすべての項目をコピーしなければならないので時間がかかります。

### 公開演算子

      RWTValSlist&
      operator=(const RWTValSlist<T>& list);

    自分自身にリスト `list` のコピーを設定します。コピーコンストラクタ `T` の性質上、リスト内のすべての項目をコピーしなければならないので時間がかかります。

      T&
      operator[](size_t i);

    インデックス `i` の項目への参照を返します。結果を左辺値として使用できます。`i` が無効なインデックスであると RWBoundsError 型の例外が発生します。有効なインデックスの範囲は 0 〜 (リスト内の項目数 -1) です。

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

    インデックス `i` の項目のコピーを返します。結果を左辺値として使用できません。`i` が無効なインデックスであると RWBoundsError 型の例外が発生します。有効なインデックスの範囲は 0 〜 (リスト内の項目数 -1) です。

### 公開メンバー関数

      void
      append(const T& a);

    項目 `a` をリストの最後に追加します。

      void
      apply(void (*applyFun)(T&, void*), void* d);

    リスト内のすべての項目に対して、ユーザー定義関数 `applyFun` を適用します。この関数には次のようなプロトタイプが必要です。

          void yourFun(T& a, void* d);

    クライアントデータをパラメータ `d` として引き渡せます。

      T&
      at(size_t i);

    インデックス `i` の項目への参照を返します。結果を左辺値として使用できます。`i` が無効なインデックスであると RWBoundsError 型の例外が発生します。有効なインデックスの範囲は 0 〜 (リスト内の項目数 -1) です。

      const T&
      at(size_t i) const;

    インデックス `i` の項目のコピーを返します。結果を左辺値として使用できません。`i` が無効なインデックスであると RWBoundsError 型の例外が発生します。有効なインデックスの範囲は 0 〜 (リスト内の項目数 -1) です。

      void
      clear();

    リストからすべての項目を取り除き、それぞれのデストラクタがあればそれを呼び出します。

      RWBoolean
      contains(const T& a) const;

    オブジェクト `a` と等しいオブジェクトがリスト内にあれば `TRUE` を、なければ `FALSE` を返します。等しいかどうかはクラス定義の等価演算子で判定します。

      RWBoolean
      contains(RWBoolean (*testFun)(const T&, void*), void* d)
               const;

    ユーザー定義テスト関数 `testFun` が `TRUE` を返す項目がリストにあれば `TRUE` を返します。そのような項目がなければ `FALSE` を返します。テスト関数には次のプロトタイプが必要です。

         RWBoolean yourTester(const T&, void* d);

    リスト内の各項目について、その項目を第 1 引数としてこの関数を呼び出します。クライアントデータをパラメータ `d` として引き渡すことができます。

      size_t
      entries() const;

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

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

    オブジェクト `target` と等しいオブジェクトがリスト内にあれば `TRUE` を返し、そのオブジェクトのコピーを `k` にセットします。等しいオブジェクトがなければ `FALSE` を返し、`k` は変わりません。等しいかどうかは、クラス定義の等価演算子で判定します。オブジェクトのコピーが必要ない場合は `contains()` を使用してください。

      RWBoolean
      find(RWBoolean (*testFun)(const T&, void*),void* d, T& k)
           const;

    ユーザー定義テスト関数 `testFun` が `TRUE` を返すオブジェクトがリスト内にあれば `TRUE` を返し、そのオブジェクトのコピーを `k` にセットします。そのような項目がなければ `FALSE` を返し、`k` は変わりません。テスト関数には次のプロトタイプが必要です。

         RWBoolean yourTester(const T&, void* d);

    リストの各項目について、その項目を第 1 引数としてこの関数を呼び出します。クライアントデータをパラメータ `d` として引き渡すことができます。オブジェクトのコピーを必要としない場合は、`contains()` を使用してください。

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

    リスト内の最初の項目を返します (ただし、取り除きません)。リストが空であると、動作は不定になります。

      T
      get();

    リストの最初の項目を返し、その項目を取り除きます。リストが空であると、動作は不定になります。

      size_t
      index(const T& a);

    オブジェクト `a` と等しい最初のオブジェクトのインデックスを返します。そのようなオブジェクトがなければ `RW_NPOS` を返します。等しいかどうかはクラス定義の等価演算子で判定します。

      size_t
      index(RWBoolean (*testFun)(const T&, void*),void* d) const;

    ユーザー定義テスト関数 `testFun` が `TRUE` を返す最初のオブジェクトのインデックスを返します。そのようなオブジェクトがなければ `RW_NPOS` を返します。テスト関数には次のプロトタイプが必要です。

         RWBoolean yourTester(const T&, void* d);

    リスト内の各項目について、その項目を第 1 引数としてこの関数を呼び出します。クライアントデータをパラメータ `d` として引き渡すことができます。

      void
      insert(const T& a);

    項目 `a` をリストの最後に追加します。

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

    インデックス位置 `i` に項目 `a` を挿入します。この位置は 0 〜 (リスト内の項目数) の範囲になければなりません。範囲外にあると RWBoundsError 型の例外が発生します。

      RWBoolean
      isEmpty() const;

    リスト内に項目がまったくなければ `TRUE` を、あれば `FALSE` を返します。

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

    リスト内の最後の項目を返します (ただし、取り除きません)。リストが空であると、動作は不定になります。

      size_t
      occurrencesOf(const T& a) const;

    リスト内のオブジェクト `a` と等しいオブジェクトの数を返します。等しいかどうかはクラス定義の等価演算子で判定します。

      size_t
      occurrencesOf(RWBoolean (*testFun)(const T&, void*),void* d)
                    const;

    リスト内のユーザー定義テスト関数 `testFun` が `TRUE` を返すオブジェクトの数を返します。テスト関数には次のプロトタイプが必要です。

         RWBoolean yourTester(const T&, void* d);

    リスト内の各項目について、その項目を第 1 引数としてこの関数を呼び出します。クライアントデータをパラメータ `d` として引き渡すことができます。

      void
      prepend(const T& a);

    項目 `a` をリストの最初に追加します。

      RWBoolean
      remove(const T& a);

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

      RWBoolean
      remove(RWBoolean (*testFun)(const T&, void*), void* d);

    ユーザー定義テスト関数 `testFun` が `TRUE` を返す最初のオブジェクトを取り除いて `TRUE` を返します。そのようなオブジェクトがなければ `FALSE` を返します。テスト関数には次のプロトタイプがなければなりません。

         RWBoolean yourTester(const T&, void* d);

    リスト内の各項目について、その項目を第 1 引数としてこの関数を呼び出します。クライアントデータをパラメータ `d` として引き渡すことができます。

      size_t
      removeAll(const T& a);

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

      size_t
      removeAll(RWBoolean (*testFun)(const T&, void*),void* d);

    ユーザー定義テスト関数 `testFun` が `TRUE` を返す、すべてのオブジェクトを取り除き、その数を返します。テスト関数には次のプロトタイプが必要です。

         RWBoolean yourTester(const T&, void* d);

    リスト内の各項目について、その項目を第 1 引数としてこの関数を呼び出します。クライアントデータをパラメータ `d` として引き渡すことができます。

      T
      removeAt(size_t i);

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

      T
      removeFirst();

    リスト内の最初の項目を取り除き、それを返します。リストが空であると、動作は不定になります。

      T
      removeLast();

    リスト内の最後の項目を取り除き、それを返します。リストが空であると、動作は不定になります。一重リンクリストの最後のリンクを取り除く場合、この関数は最後の 1 つ前のリンクにアクセスする必要があり、結果としてリスト全体を検索するため、処理速度はあまり速くありません。

### 関連の大域演算子

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

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

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

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

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

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