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

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

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

## RWGOrderedVector(val)

### 形式

      #include <rw/gordvec.h>
      declare(RWGVector,val)
      declare(RWGOrderedVector,val)
      implement(RWGVector,val)
      implement(RWGOrderedVector,val)

      RWGOrderedVector(val) v;// 型 val のオブジェクトから成る順序付きベクトル

### 説明

  このクラスは、型 `val` のオブジェクトから成る順序付きコレクションを表します。オブジェクトは、挿入順に順序が決まり、インデックスでアクセスできます。要素の重複は許可されています。標準 C++ ヘッダファイル `<generic.h>` で定義されているマクロを使用して、ベクトルとして実装されます。このクラスは値にもとづくコレクションなので注意してください。項目をコレクションにコピーしたり取り出したりします。

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

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

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

        declare(RWGVector,double) // 基底クラスの宣言

        declare(RWGOrderedVector,double) // 順序付きベクトルの宣言

        // 1 つの .cc ファイルだけに、次のように記述しなければなりません。

        implement(RWGVector,double) // 基底クラスの実装

        implement(RWGOrderedVector,double) // 順序付きベクトルの実装

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

### 持続性

  なし

### 例

  `RWCString` から成る順序付きベクトルを使用する例を示します。

      #include <rw/gordvec.h>
      #include <rw/cstring.h>
      #include <rw/rstream.h>

      declare(RWGVector,RWCString)
      declare(RWGOrderedVector,RWCString)
      implement(RWGVector,RWCString)
      implement(RWGOrderedVector,RWCString)

      main()  {
        RWGOrderedVector(RWCString) vec;

        RWCString one("First");
        vec.insert(one);

        vec.insert("Second");   // 自動型変換が行われる
        vec.insert("Last");     // 自動型変換が行われる

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

        return 0;
      }

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

      First
      Second
      Last

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

      RWGOrderedVector(val)(size_t capac=RWDEFAULT_CAPACITY);

    型 `val` の要素から成る順序付きベクトルを作成します。ベクトルの初期容量は `capac` で、デフォルト値は `RWDEFAULT_CAPACITY` になります。挿入される項目が容量を超えそうな場合、容量は自動的に増加されます。このとき各項目を新しい記憶領域にコピーする必要があるので、時間がかなりかかります。

### 公開メンバー関数

      val
      operator()(size_t i) const;
      val&
      operator()(size_t i);

    ベクトル内の `i` 番目の値を返します。インデックス `i` は 0 〜 (ベクトル長 -1) の範囲になければなりません。境界検査は行いません。2 番目に記述した可変要素を左辺値として使用できますが、1 番目に記述したものは使用できません。

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

    ベクトル内の `i` 番目の値を返します。インデックス `i` は 0 〜 (ベクトル長 -1) の範囲になければなりません。境界検査を行います。2 番目に記述した可変要素を左辺値として使用できますが、1 番目に記述したものは使用できません。

      void
      clear();

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

      const val*
      data() const;

    自分自身の raw データへのポインタを返します。注意して使用してください。

      size_t
      entries() const;

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

      size_t
      index(val item) const;

    コレクションの線形探索を行い、引数 `item` と等しい最初の項目のインデックスを返します。等しい項目がなければ `RW_NPOS` を返します。

      void
      insert(val item);

    新しい値 `item` をコレクションの最後に追加します。

      void
      insertAt(size_t indx, val item);

    コレクション内のインデックス位置 `indx` に新しい値 `item` を追加します。`indx` の値は 0 〜 (コレクションの長さ) の範囲になければなりません。境界検査は行いません。インデックス `indx` 以降の項目は、より高いインデックス位置に順次移動します。

      RWBoolean
      isEmpty() const;

    コレクション内に項目がまったくなければ `TRUE` を、あれば `FALSE` を返します。

      void
      size_t
      length() const;

    `entries()` の同意語。

      val
      pop();

    ベクトルの最後の項目を削除し、返します。

      void
      push(val);

    `insert()` の同意語。

      void
      removeAt(size_t indx);

    インデックス位置 `indx` にある項目をコレクションから取り除きます。`indx` の値の範囲は 0 〜 (コレクションの長さ -1) です。境界検査は行いません。インデックス `indx+1` 以降の項目は、より低いインデックス位置に順次移動します。たとえば `indx+1` にある項目は `indx` に移動し、それ以降の項目も同様に前に移動します。

      void
      resize(size_t newCapacity);

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