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

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


RWGSortedVector(val)

RWGSortedVector(val) RWGVector(val)

形式

#include <rw/gsortvec.h>
declare(RWGSortedVector,val)
implement(RWGSortedVector, val)
RWGSortedVector(val) v;    // vals のソート済みベクトル

説明

このクラスは、挿入ソートを使用してソートした型 val の要素から成るベクトルを表します。各要素は、インデックスまたは検索によって取り出せます。項目の重複は許可されています。この型のオブジェクトは、標準 C++ ヘッダファイル <generic.h> で定義されたマクロを使用して宣言されます。このクラスは値ベースのコレクションなので注意してください。項目をコレクションにコピーしたり取り出したりします。

クラス val には次のものが必要です。

このクラスを使用するには、クラス自身だけでなくその基底クラスも宣言および実装しなければなりません。倍精度実数の順序付きコレクションを宣言および実装する方法を示します。

declare(RWGVector,double)         // 基底クラスの宣言
declare(RWGSortedVector,double)   // ソート済みベクトルの宣言

// 1 つの .cpp ファイルだけに、次のように記述しなければなりません。
implement(RWGVector,double)       // 基底クラスの実装
implement(RWGSortedVector,double) // ソート済みベクトルの実装

RWGSortedVector のすべての val で、RWGSortedVector とその基底クラス RWGVector 両方について、コードのどこかでマクロ implement に対する呼び出しを 1 回だけ行う必要があります。

2 等分探索を使用して、挿入や取り出しを行います。RWGSortedVector(val) のコンストラクタには、比較関数へのポインタが必要なので注意してください。この関数には、次のプロトタイプが必要です。

    int comparisonFunction(const val* a, const val* b);
これは、項目 a が項目 b に比べて小さいか、大きいか、等しいかに応じて、それぞれゼロより小さい整数、ゼロより大きい整数、ゼロをそれぞれ返します。コレクション内の項目を a、キーを b とします。

持続性

なし

int のソート済み整数ベクトルの例を挙げます。

#include <rw/gsortvec.h>
#include <rw/rstream.h>

declare(RWGVector,int)
declare(RWGSortedVector,int)
implement(RWGVector,int)
implement(RWGSortedVector,int)

// 比較関数を宣言および定義する
int compFun(const int* a, const int* b)  {
  return *a - *b;
}

main()  {
  // 比較関数 "compFun" を使用してインスタンスを宣言および定義する
  RWGSortedVector(int) avec(compFun);
  // 挿入を行う
  avec.insert(3);          // 3
  avec.insert(17);         // 3 17
  avec.insert(5);          // 3  5 17

  cout << avec(1);         // '5' を出力する
  cout << avec.index(17);  // '2' を出力する
}

公開コンストラクタ

RWGSortedVector(val)( int (*f)(const val*, const val*) );

比較関数 f を使用して、型 val の要素から成るソート済みベクトルを作成します。ベクトルの初期容量は値 RWDEFAULT_CAPACITY によって設定されます。挿入される項目数が超過すると、この容量は自動的に増加されます。

RWGSortedVector(val)(int (*f)(const val*, const val*),
                size_t N);

比較関数 f を使用して、型 val の要素から成るソート済みベクトルを作成します。ベクトルの初期容量は N です。挿入される項目数が超過すると、この容量は自動的に増加されます。

公開メンバー関数

val
operator()(size_t i) const;

ベクトル内の i 番目の値を返します。インデックス i は 0 〜 (ベクトル長 -1) の範囲になければなりません。境界検査は行いません。

val
operator[](size_t i) const;

ベクトル内の i 番目の値を返します。インデックス i は 0 〜 (ベクトル長 -1) の範囲になければなりません。境界検査を行います。

size_t
entries() const;

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

size_t
index(val v) const;

v を持つ項目のインデックスを返します。その値がベクトル内になければ値 RW_NPOS を返します。比較関数を使用して 2 等分探索を行い、値を探します。重複した項目があれば最初の項目のインデックスを返します。

RWBoolean
insert(val v);

新しい値 v をベクトルに挿入します。比較関数を使用して 2 等分探索を行い、値を挿入する場所を決めます。重複した項目があれば最後の重複項目の後に挿入します。挿入の結果、ベクトルの容量を超えると RWDEFAULT_RESIZE で指定された大きさだけ容量が自動的に増加されます。

void
removeAt(size_t indx);

コレクションから位置 indx にある項目を削除します。indx の値は、0 〜 (コレクションの長さ -1 ) の範囲になければなりません。境界検査は行いません。インデックス indx+1 からの古い項目は、低いインデックスにシフトされます。たとえば、インデックス indx+1 にある項目は、位置 indx に移動されます。

void
resize(size_t newCapacity);

コレクションの容量を newCapacity に変更します。newCapacity は、コレクションの項目数以上でなければなりません。コレクション内の実際の項目数は変わらず、容量だけが変わるので注意してください。