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

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


RWSortedVector

RWSortedVector RWOrdered RWSequenceable ...
... RWCollection RWCollectable

形式

#include <rw/sortvec.h>
RWSortedVector a;

説明

このクラスは、内部的に compareTo() 関数でソートされインデックス番号でアクセスできる、順序付き項目の集まりを表します。項目の重複は許可されています。このクラスによって格納されるオブジェクトは、抽象基底クラス RWCollectable から継承しなければなりません。挿入した順番で、ベクトルの順序が決まります。

このクラスはポインタベクトルとして実装されるので、コレクション内の走査はクラス RWBinaryTree を使用する場合よりも効率的です。ただ、コレクションの途中への、挿入速度が遅くなります。

ベクトルはソートされるため、ベクトルに含まれる要素について、順序を無効にするような変更はしないでください。

持続性

多相

// sortrec.cpp
#include <rw/sortvec.h>
#include <rw/collstr.h>
#include <rw/rstream.h>

main(){
   RWSortedVector sv;
   sv.insert(new RWCollectableString("dog"));
   sv.insert(new RWCollectableString("cat"));
   sv.insert(new RWCollectableString("fish"));
   RWSortedVectorIterator next(sv);
   RWCollectableString* item;
   while( item = (RWCollectableString*)next() )
     cout << *item << endl;
   sv.clearAndDestroy();
}

プログラム出力:

cat
dog
fish

公開コンストラクタ

RWSortedVector(size_t size = RWDEFAULT_CAPACITY);

size 項目の初期容量を持った空の RWSortedVector を作成します。容量は必要に応じて自動的に増加します。

公開メンバー演算子

RWBoolean
operator==(const RWSortedVector& sv) const;

自分自身内のすべての項目について、sv 内の同じインデックスの項目が isEqual ならば、TRUE を返します。両方のコレクションは、同じ数のメンバーを持っていなければなりません。

const RWCollectable*
operator[](size_t i);

コレクション内の i 番目の要素を返します。i が範囲外にあると RWBoundsErr 型の例外が発生します。この関数の結果は左辺値として使用できます。

const RWCollectable*
operator()(size_t i);

コレクション内の i 番目の要素を返します。ヘッダファイル sortvec.h を取り込む前に前処理マクロ RWBOUNDS_CHECK を定義することで、境界検査が可能になります。この場合、i が範囲外にあると RWBoundsErr 型の例外が発生します。この関数の結果は、左辺値として使用できます。

公開メンバー関数

virtual void
apply(RWapplyCollectable ap, void* x);

クラス RWOrdered から継承した関数。

virtual const RWCollectable*
at(size_t i) const;

クラス RWOrdered から継承した関数。

virtual RWspace
binaryStoreSize() const;

クラス RWCollection から継承した関数。

virtual void
clear();

クラス RWOrdered から継承した関数。

virtual void
clearAndDestroy();

クラス RWCollection から継承した関数。

virtual int
compareTo(const RWCollectable* a) const;

クラス RWCollectable から継承した関数。

virtual RWBoolean
contains(const RWCollectable* target) const;

クラス RWCollection から継承した関数。

virtual size_t
entries() const;

クラス RWOrdered から継承した関数。

virtual RWCollectable*
find(const RWCollectable* target) const;

クラス RWOrdered から継承した関数。RWOrdered::find() は、仮想関数 index() を使用して探索を実行するので、2 分探索を行うことになります。

virtual RWCollectable*
first() const;

クラス RWOrdered から継承した関数。

virtual unsigned
hash() const;

クラス RWCollectable から継承した関数。

virtual size_t
index(const RWCollectable*) const;

クラス RWOrdered から再定義した関数。2 分探索を実行して、ターゲットの項目と等しい最初の項目のインデックスを返すか、等しい項目がなければ RW_NPOS を返します。

virtual RWCollectable*
insert(RWCollectable* c);

クラス から再定義した関数。2 分探索を行い、項目 c を、その項目と等しいかそれより小さいすべての項目の後ろで、かつその項目より大きいすべての項目の前に挿入します。挿入が失敗すると NULL を、成功すると c を返します。

virtual RWClassID
isA() const;

クラス RWOrdered RWBoolean から再定義した関数。__RWSORTEDVECTOR を返します。

virtual RWBoolean
isEmpty() const;

クラス RWOrdered から継承した関数。

virtual RWBoolean
isEqual(const RWCollectable* a) const;

クラス RWCollectable から継承した関数。

virtual RWCollectable*
last() const;

クラス RWOrdered から継承した関数。

virtual size_t
occurrencesOf(const RWCollectable* target) const;

クラス RWOrdered から再定義した関数。項目 target と等しい項目の数を返します。

virtual RWCollectable*
remove(const RWCollectable* target);

クラス RWOrdered から継承した関数。RWOrdered::remove() は、仮想関数 index() を使用して探索を実行するので、2 分探索を行うことになります。

virtual void
removeAndDestroy(const RWCollectable* target);

クラス RWCollection から継承した関数。

RWCollectable*
removeAt(size_t index);

クラス RWOrdered から継承した関数。コレクションにおいて位置インデックスにある項目を削除し、それを返します。