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

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 が自分自身内の項目を参照しない場合 (かつ firstbound が等しくない場合)、その影響は定義されていません。

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 の直前に挿入します。fromdonor に実際に含まれている項目を参照しない場合の影響は定義されていません。このメソッドは、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);

lhsrhs の要素数が同じで、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());