ВУЗ:
Составители:
Рубрика:
void slist_handlr(char*) {} /*-заглушка для функции; */
ent slist::get()
{ if(last==0) slist_handlr("Список пуст");/*-см. 4.3; */
else /*-продолжение обработки,если список не пуст: */
{ slink* g=last->next;/*-указатель 1-го элемента; */
ent ret=g->e;/*-указатель на поле данных для */
/* 1-го элемента; */
if(g==last)/*-если элемент - один в списке; */
last=0; /*-список пуст после удаления звена; */
else
last->next=g->next;/*-исключение звена; */
delete g; /*-освобождение места для 1-го звена;*/
return ret;/*-возвращение указателя данных; */
}
}
г)удаление всех элементов из списка(очистка списка):
void slist::clear()
{ slink* nxt=last;/*-выбор 1-го удаляемого элемента; */
if(nxt==0)return;/*-возврат,если список пуст; */
do { /*-удаление элементов из непустого списка; */
slink* dlt=nxt;/*-указатель удаляемого звена; */
nxt=nxt->next; /*-указатель очередного звена; */
delete dlt;
}
while(nxt!=last);/*-пока не последнее(уже удален- */
/* ное) звено; */
}
Заметим,что сам класс slist не имеет функций,которые обес-
печивали бы перебор элементов в цикле.Обычно для этих целей
вводят специальный класс - итератор,который содержит все не-
обходимые для перебора элементов функции и является дружест-
венным к исходному классу slist.Структура итератора такова:
61
void slist_handlr(char*) {} /*-заглушка для функции; */ ent slist::get() { if(last==0) slist_handlr("Список пуст");/*-см. 4.3; */ else /*-продолжение обработки,если список не пуст: */ { slink* g=last->next;/*-указатель 1-го элемента; */ ent ret=g->e;/*-указатель на поле данных для */ /* 1-го элемента; */ if(g==last)/*-если элемент - один в списке; */ last=0; /*-список пуст после удаления звена; */ else last->next=g->next;/*-исключение звена; */ delete g; /*-освобождение места для 1-го звена;*/ return ret;/*-возвращение указателя данных; */ } } г)удаление всех элементов из списка(очистка списка): void slist::clear() { slink* nxt=last;/*-выбор 1-го удаляемого элемента; */ if(nxt==0)return;/*-возврат,если список пуст; */ do { /*-удаление элементов из непустого списка; */ slink* dlt=nxt;/*-указатель удаляемого звена; */ nxt=nxt->next; /*-указатель очередного звена; */ delete dlt; } while(nxt!=last);/*-пока не последнее(уже удален- */ /* ное) звено; */ } Заметим,что сам класс slist не имеет функций,которые обес- печивали бы перебор элементов в цикле.Обычно для этих целей вводят специальный класс - итератор,который содержит все не- обходимые для перебора элементов функции и является дружест- венным к исходному классу slist.Структура итератора такова: 61
Страницы
- « первая
- ‹ предыдущая
- …
- 59
- 60
- 61
- 62
- 63
- …
- следующая ›
- последняя »