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

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

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

## rw_slist<T>

### 形式

      #include <rw/rwstl/slist.h>
      rw_slist<T> list;

### 説明

  クラス rw_slist<T> は、片方向リンクリストとして実装されている T のコレクションを維持します。これは値にもとづくリストであるため、オブジェクトはリストを構成するリンクとの間でコピーされます。ANSI シーケンス仕様に適合するすべてのクラス同様、rw_slist はその要素を参照する反復子を提供しています。rw_slist の内容を変更する操作によって、変更した場所またはそれ以降の場所にある項目を参照する反復子が無効になります。

### 公開 Typedef

      typedef T                  value_type;
      typedef T&                 reference;
      typedef const T&           const_reference;
      typedef (unsigned)         size_type; //Allocator<Node> から

  rw_slist<T> の反復子は順方向反復子です。

      typedef (scoped Iterator)       iterator;
      typedef (scoped ConstIterator)  const_iterator;

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

      rw_slist<T>();

    空の rw_slist<T> を作成します。

      rw_slist<T>(const rw_slist<T>& list);

    list のコピーである rw_slist<T> を作成します。`list` から各要素が自分自身内にコピーされます。

      rw_slist<T>(size_type count, const T& value);

    `value` の正確なコピー数 (`count`) を含む rw_slist<T> を作成します。

      rw_slist<T>(const_iterator first, const_iterator bound);

    `first` で始まり `bound` で区切られる範囲で参照される各要素のコピーを収めた rw_slist<T> を作成します。

      rw_slist<T>(const T* first, const T* bound);

    `first` で始まり `bound` で区切られる範囲で参照される各要素のコピーを収めた rw_slist<T> を作成します。

### 公開デストラクタ

      ~rw_slist<T>();

    デストラクタは、リンクで使用されていたメモリーを解放します。

### アクセサー関数

      iterator
      begin();

    返される反復子は、自分自身内の最初の項目を参照します。自分自身が空の場合、反復子は `end()` に等しくなります。

      const_iterator
      begin() const;

    返される反復子は、自分自身内の最初の項目を参照します。自分自身が空の場合、反復子は `end()` に等しくなります。

      iterator
      end();

    返される反復子は、自分自身の「終端を越えた」位置にマークを付けます。間接参照できません。

      const_iterator
      end() const;

    返される反復子は、自分自身の「終端を越えた」位置にマークを付けます。間接参照できません。

      T&
      front();

    リストの最初の項目を左辺値として参照します。自分自身が空の場合、動作は定義されていません。

      const T&
      front();

    リストの最初の項目を右辺値として参照します。自分自身が空の場合、動作は定義されていません。

### Const 公開メンバー関数

      bool
      empty() const;

    自分自身が空であれば `TRUE` を返します。

      size_type
      size() const;

    自分自身が現在保持している項目数を返します。

### 変異子

      iterator
      erase(iterator iter);

    自分自身から `iter` で参照される要素を削除します。`iter` が自分自身内の項目を参照しない場合の影響は定義されていません。消去した項目の直後の位置を参照する反復子を返します。

      iterator
      erase(iterator first, iterator bound);

    `first` で始まり `bound` で区切られる範囲で参照される要素を自分自身から削除します。最後に消去した項目の直後の位置を参照する反復子を返します。`first` が自分自身内の項目を参照しない場合 (かつ `first` と `bound` が等しくない場合)、その影響は定義されていません。

      iterator
      insert(iterator loc, const T& val);

    `loc` で参照された場所の直前に `val` を挿入します。新しく挿入された要素を参照する反復子を返します。(注: `++(list.insert(loc,val))==loc;` )

      iterator
      insert(iterator loc, const_iterator first, const_iterator bound);

    `first` で始まり `bound` で区切られる範囲の各要素のコピーを、自分自身内で `loc` が参照した場所の直前に挿入します。最後に新しく挿入した要素を参照する反復子を返します。(注: `++(list.insert(loc,first,bound))==loc;` )

      iterator
      insert(iterator loc, const T* first, const T* bound);

    `first` で始まり `bound` で区切られる範囲の各要素のコピーを、自分自身内で `loc` が参照した場所の直前に挿入します。最後に新しく挿入した要素を参照する反復子を返します。(注: `++(list.insert(loc,first,bound))==loc;` )

      void
      pop_front();

    自分自身内の最初の要素を消去します。自分自身が空の場合の影響は定義されていません。

      void
      push_back(const T& item);

    `item` をリストの最後の要素として挿入します。

      void
      push_front(const T& item);

    `item` をリストの最初の要素として挿入します。

      void
      reverse();

    自分自身内に要素を持つノードの順序を逆にします。

      void
      sort();

    `T::operator<(T)` または同等の演算子に従って自分自身をソートします。`N log(N)` に比例する時間で実行します。ここで、N は要素数です。このメソッドは、ソート中に交換される項目をコピーしたり破壊するのではなく、リスト内のリンクの順序を調整します。

      void
      swap(rw_slist<T>& other);

    それぞれの順序を保持しながら自分自身の内容と `other` の内容を交換します。このメソッドは、交換される項目をコピーしたり破壊するのではなく、リストを再リンクします。

      void
      unique();

    自分自身から等しい各範囲の最初の要素を除くすべての要素を削除します。前提条件は、重複要素はすべて隣接しているということです。

### リストの特殊メソッド

      void
      merge(rw_slist& donor);

    `donor` と自分自身の両方がソートされていると仮定すると、`donor` からすべての項目を自分自身に移動し、`donor` を空にし、自分自身をソートします。どちらのリストもソートされていない場合、移動は行われますが、結果はソートされない場合があります。このメソッドは、`donor` の項目をコピーしたり破壊するのではなく、リストノードを自分自身に再リンクします。

      void
      splice(iterator to, rw_slist<T>& donor);

    `donor` の全部の内容を自分自身の参照された直前の位置に挿入し、`donor` を空にします。このメソッドは、移動された項目をコピーしたり破壊するのではなく、リストノードを `donor` から自分自身に再リンクします。

      void
      splice(iterator to, rw_slist<T>& donor, iterator from);

    `from` で参照される項目を `donor` から削除し、自分自身内で `to` の直前に挿入します。`from` が `donor` に実際に含まれている項目を参照しない場合の影響は定義されていません。このメソッドは、`from` が参照した項目をコピーしたり破壊するのではなく、それが含まれるノードを `donor` から自分自身に再リンクします。

      void
      splice(iterator to, rw_slist<T>& donor, iterator from_start,
             iterator from_bound);

    `from_start` から始まり `from_bound` で区切られる範囲で参照される項目を `donor` から削除し、自分自身内で `to` の直前に挿入します。その範囲が `donor` に含まれる項目を参照しない場合の影響は定義されていません。このメソッドは、`from` で指定される項目をコピーしたり破壊するのではなく、これらのリストノードを `donor` から自分自身に再リンクします。

### 関連の大域演算子

      bool
      operator==(const rw_slist<T>& lhs, const rw_slist<T>& rhs);

    `lhs` と `rhs` の要素数が同じで、`rhs` の各項目が `lhs` の対応する要素と (T::`operator==()` または同等な演算子) によって等値であるとテストされた場合は、`TRUE` を返します。

      bool
      operator<(const rw_slist<T>& lhs, const rw_slist<T>& rhs);

    次の関数を呼び出した結果を返します。

           lexicographical_compare(lhs.begin(), lhs.end(),
                 rhs.begin(), rhs.end());