Объектно-ориентированный язык программирования С++ в примерах. Сивохин А.В. - 61 стр.

UptoLike

Составители: 

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