Статья: Альтернативные Интерфейсы

(*slist_handler)("get fromempty list");

И slist::clear(), наконец, удаляет из списка все элементы:

void slist::clear()

{

slink* l = last;

if (l == 0) return;

do {

slink* ll = l;

l = l->next;

delete ll;

} while (l!=last);

}

Класс slist не обеспечивает способа заглянуть в список, но только средства для вставления и удаления элементов. Однако оба класса, и slist, и slink, описывают класс slist_iterator как друга, поэтому мы можем описать подходящий итератор. Вот один, написанный в духе этого пункта:

class slist_iterator {

slink* ce;

slist* cs;

public:

slist_iterator(slist& s) { cs = &s; ce = cs->last; }

ent operator()() {

// для индикации конца итерации возвращает 0

// для всех типов не идеален, хорош для указателей

ent ret = ce ? (ce=ce->next)->e : 0;

if (ce == cs->last) ce= 0;

return ret;

}

};

Как Этим Пользоваться

Фактически класс slist в написанном виде бесполезен. В конечном счете, зачем можно использовать список указателей void*? Штука в том, чтобы вывести класс из slist и получить список тех объектов, которые представляют интерес в конкретной программе. Представим компилятор языка вроде C++. В нем широко будут использоваться списки имен; имя - это нечто вроде

struct name {

char* string;

К-во Просмотров: 434
Бесплатно скачать Статья: Альтернативные Интерфейсы