バナーをクリックすれば目次に戻ります
Copyright 1999 Rogue Wave Software
Copyright 1999 Sun Microsystems, Inc.
RWTIsvSlist<T>
#include <rw/tislist.h> RWTIsvSlist<T> list;
侵入的リストとは、リスト内のメンバーが共通基底クラス (この場合、RWIsvSlink) から継承されていなければならないものをいいます。このリストの長所は、メモリーとディスク空間に対する要求が最小であることです。また短所は、継承階層が柔軟性に欠けるため、既存クラスでの使用が多少困難であることです。非侵入的な代替リンクリストとして、クラス RWTValSlist<T> があります。
侵入的リストの詳細は、Stroustrup (1991 年、Section 8.3.1) を参照してください。
注 - 侵入的リストに項目を挿入するとき、コピーではなく実体を挿入します。各項目は 1 つのリンクフィールドのみを持つ、同じ項目を複数のリストに挿入したり、同じ項目を複数回同じリストに挿入することはできません。
#include <rw/tislist.h> #include <rw/rstream.h> #include <string.h> struct Symbol : public RWIsvSlink { char name[10]; Symbol( const char* cs) { strncpy(name, cs, sizeof(name)); name[9] = '\0'; } }; void printem(Symbol* s, void*) { cout << s->name << endl; } main(){ RWTIsvSlist<Symbol> list; list.insert( new Symbol("one") ); list.insert( new Symbol("two") ); list.prepend( new Symbol("zero") ); list.apply(printem, 0); list.clearAndDestroy(); // リスト内に挿入された項目を削除する return 0; } |
zero one two |
RWTIsvSlist();
RWTIsvSlist(T* a);
void append(T* a);
void apply(void (*applyFun)(T*, void*), void* d);
void yourFun(T* item, void* d);
T* at(size_t i) const;
void clear();
void clearAndDestroy();
RWBoolean contains(RWBoolean (*testFun)(const T*, void*), void* d) const;
RWBoolean yourTester(const T* item, void* d);
RWBoolean containsReference(const T* a) const;
size_t entries() const;
T* find(RWBoolean (*testFun)(const T*, void*),void* d) const;
RWBoolean yourTester(const T* item, void* d);
T* first() const;
T* get();
size_t index(RWBoolean (*testFun)(const T*, void*),void* d) const;
RWBoolean yourTester(const T* item, void* d);
void insert(T* a);
void insertAt(size_t i, T* a);
RWBoolean isEmpty() const;
T* last() const;
size_t occurrencesOf(RWBoolean (*testFun)(const T*, void*),void* d) const;
RWBoolean yourTester(const T* item, void* d);
size_t occurrencesOfReference(const T* a) const;
void prepend(T* a);
T* remove(RWBoolean (*testFun)(const T*, void*),void* d);
RWBoolean yourTester(const T* item, void* d);
T* removeAt(size_t i);
T* removeFirst();
T* removeLast();
T* removeReference(T* a);