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

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


RWTPtrSortedVector<T,C>

形式

#include <rw/tpsrtvec.h>
RWTPtrSortedVector<T,C> srtvec;

注意


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

説明

このクラスは、ベクトルとして実装されている、常時ソートされた、ポインタにもとづく値のコレクションを維持します。項目は、型 C の比較オブジェクトに従って順序が付けられています。クラス T はコレクションの項目が指す型です。

C は、次の公開メンバーを介して、型 T の要素に対する全体的な順序付けを誘導しなければなりません。

    bool operator()(const T& x, const T& y)
これは、コレクション内において、xy より前になる場合、TRUE を返します。C++ 標準ヘッダーファイル <functional> からの構造体 less<T> がその例です。コレクションの項目は比較前に間接参照されることに注意してください。

持続性

同形

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

//
// tpsrtvec.cpp
//
#include <rw/rwdate.h>
#include <rw/tpsrtvec.h>
#include <iostream.h>

main(){
  RWTPtrSortedVector<RWDate, greater<RWDate> > vec;

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

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

  vec.clearAndDestroy();

  return 0;
}

プログラム出力:

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

関連クラス

RWTPtrSortedDlist<T,C> は、もうひとつの常時ソートされたポインタにもとづくコレクションです。RWTPtrOrderedVector<T> は、ソートされていないポインタにもとづくベクトルです。

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

公開 Typedef

typedef vector<T*,allocator>                   container_type;
typedef rw_deref_compare<C,T>                  container_comp;
typedef container_type::const_iterator         const_iterator;
typedef container_type::const_iterator         iterator;
typedef container_type::size_type              size_type;
typedef container_type::difference_type        difference_type;
typedef T*                                     value_type;
typedef T*&                                    reference;
typedef T* const&                              const_reference;

公開コンストラクタ

RWTPtrSortedVector<T,C>();

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

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

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

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

コピーコンストラクタ。

RWTPtrSortedVector<T,C>(size_type n, T* p);

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

RWTPtrSortedVector<T,C>(size_type n);

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

RWTPtrSortedVector<T,C>(T** first,T** last);

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

公開メンバー演算子

bool
operator<(const RWTPtrSortedVector<T,C>& vec) const;

自分自身が辞書形式で vec より小さい場合は TRUE を返し、等しいか大きい場合は FALSE を返します。各コレクションの項目は比較前に間接参照されます。

bool
operator==(const RWTPtrSortedVector<T,C>& 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)(T*,void*), void* d);
void
apply(void (*fn)(T*&,void*), void* d);
void
apply(void (*fn)(const T*,void*), void* d) const;

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

   void yourfun(T* a, void* d);
   void yourfun(T*& a, void* d);
   void yourfun(const T* 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();

自分自身から項目をすべて削除することによって、コレクションを消去します。

void
clearAndDestroy();

コレクションからすべての項目を削除し、delete 演算子を使用して、これらの項目が指すオブジェクトを破棄します。同じオブジェクトに対して複数のポインタが格納される場合は、このメソッドを使用しないでください。

bool
contains(const T* a) const;

自分自身に式 (*t == *a)TRUE になるような要素 t がある場合は TRUE を返し、ない場合は FALSE を返します。

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

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

   bool yourTester(const T* a, void* d);

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

T* const*
data() const;

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

iterator
end();
const_iterator
end() const;

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

size_type
entries() const;

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

const T*
find(const T* a) const;

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

const T*
find(bool (*fn)(const T*,void*), void* d) const;

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

   bool yourTester(const T* a, void* d);

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

reference
first();
const_reference
first() const;

自分自身内の最初の要素への参照を返します。コレクションが空の場合、この関数は、型 RWBoundsErr の例外を送出します。

size_type
index(const T* a) const;

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

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

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

   bool yourTester(const T* a, void* d);

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

bool
insert(T* a);

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

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

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

bool
isEmpty() const;

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

bool
isSorted() const;

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

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

コレクション内の最後の項目への参照を返します。コレクションが空の場合、この関数は、型 RWBoundsErr の例外を送出します。

size_type
length() const;

自分自身内の要素数を返します。

size_type
merge(const RWTPtrSortedVector<T,C>& vec);

ソート順序を維持したまま、vec のすべての要素を自分自身に挿入します。挿入された項目数を返します。

size_type
occurrencesOf(const T* a) const;

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

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

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

   bool yourTester(const T* a, void* d);

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

T*
remove(const T* a);

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

T*
remove(bool (*fn)(const T*,void*), void* d);

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

   bool yourTester(const T* a, void* d);

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

size_type
removeAll(const T* a);

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

size_type
removeAll(bool (*fn)(const T*,void*), void* d);

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

   bool yourTester(const T* a, void* d);

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

T*
removeAt(size_type i);

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

T*
removeFirst();

コレクション内の最初の項目を削除して返します。コレクションが空の場合、この関数は、型 RWBoundsErr の例外を送出します。

T*
removeLast();

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

void
resize(size_type n);

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

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

自分自身に対する実装として使用される、基礎となる C++ 標準コレクションへの参照を返します。

静的公開データメンバー

const size_type  npos;

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

関連の大域演算子

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

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

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

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

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