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

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


RWTPtrSlist<T>

形式

#include <rw/tpslist.h>
RWTPtrSlist<T> list;

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

説明

このクラスは、型 T へのポインタのコレクションを保守するもので、一重リンクリストとして実装されます。これはポインタにもとづくリストです。リストを構築するリンクにオブジェクトへのポインタをコピーしたり取り出します。

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

持続性

同形

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

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

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

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

  // 逆順に取り除く
  while (!dates.isEmpty()){
    d = dates.removeLast();
    cout << *d << endl;
    delete d;
  }

  return 0;
}

プログラム出力:

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

公開コンストラクタ

RWTPtrSlist<T>();

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

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

新しい一重リンクリストを、c のシャローコピーとして作成します。作成後、ポインタは 2 つのコレクション間で共有されます。

公開演算子

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

自分自身に c のシャローコピーを設定します。設定後、ポインタは 2 つのコレクション間で共有されます。

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

リスト内の i 番目の値へのポインタを返します。最初に記述した可変要素は左辺値として使用できますが、2 番目に記述したものは使用できません。インデックス i は 0 〜 (コレクション内の項目数 -1) の範囲でなければなりません。範囲外にあると RWBoundsError 型の例外が発生します。

公開メンバー関数

void
append(T* a);

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

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

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

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

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

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

リスト内の i 番目の値へのポインタを返します。最初の可変要素は左辺値として使用できますが、2 番目の可変要素は使用できません。インデックス i は 0 〜 (コレクション内の項目数 -1) の範囲になければなりません。範囲外にあると RWBoundsError 型の例外が発生します。

void
clear();

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

void
clearAndDestroy();

コレクションからすべての項目を取り除き、それぞれのデストラクタを呼び出します。

RWBoolean
contains(const T* a) const;

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

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

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

    RWBoolean yourTester(T*, void* d);

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

size_t
entries() const;

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

T*
find(const T* target) const;

オブジェクト target と等しい最初のオブジェクトへのポインタを返します。等しいオブジェクトがなければ NULL を返します。等しいかどうかは、型 T に対するクラス定義の等価演算子で判定します。

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

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

    RWBoolean yourTester(T*, void* d);

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

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

リスト内の最初の項目へのポインタを返します。リストが空であると、動作の結果は不定になります。

T*
get();

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

size_t
index(const T* a);

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

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

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

    RWBoolean yourTester(T*, void* d);

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

void
insert(T* a);

オブジェクト a をリストの最後に追加します。

void
insertAt(size_t i, T* a);

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

RWBoolean
isEmpty() const;

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

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

リスト内の最後の項目へのポインタを返します。リストが空であれば、動作の結果は不定です。

size_t
occurrencesOf(const T* a) const;

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

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

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

    RWBoolean yourTester(T*, void* d);

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

void
prepend(T* a);

オブジェクト a をリストの最初に追加します。

T*
remove(const T* a);

オブジェクト a と等しい最初のオブジェクトを取り除き、それへのポインタを返します。等しいオブジェクトがなければ NULL を返します。等しいかどうかは、型 T に対するクラス定義の等価演算子で判定します。

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

ユーザー定義テスト関数 testFunTRUE を返す最初のオブジェクトを取り除き、それへのポインタを返します。そのようなオブジェクトがなければ NULL を返します。テスト関数には次のプロトタイプが必要です。

    RWBoolean yourTester(T*, void* d);

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

size_t
removeAll(const T* a);

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

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

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

    RWBoolean yourTester(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 RWTPtrSlist<T>& coll);
RWFile&
operator<<(RWFile& strm, const RWTPtrSlist<T>& coll);

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

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

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

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

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