Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Data Structures and Algorithms in C++ 2e (На ру...docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.37 Mб
Скачать

6.2. Списки

243 оператора равенства и неравенства (» ==» и»! = «). Мы обеспечиваем способность продвинуться или назад в списке, обеспечивая приращение и операторов декремента (» ++» и «-»). Мы объявляем, что NodeList друг, так, чтобы он мог получить доступ к членам парламента, не занимающим официального поста Iterator. Частный участник данных состоит из указателя v к связанному узлу списка. Мы также предоставляем частному конструктору, который инициализирует указатель узла. (Конструктор частный так, чтобы только NodeList разрешили создать новый iterators.)

класс Iterator //iterator для списка

общественность:

Elem& оператор* (); //ссылка на элемент

оператор bool == (константа Iterator& p) константа;//сравнивают положения bool оператор! = (константа Iterator& p) константа;

Iterator& оператор ++ ();

Iterator& оператор - ();

друг класс NodeList;

частный:

N o de* v; Iterator (Узел* u);

;

//двиньтесь в следующее положение//, двигаются в предыдущее положение//, предоставляют доступ NodeList

//указатель на узел//создает из узла

Кодовый Фрагмент 6.7: Класс Iterator, понимая iterator для вдвойне связанного списка.

В Кодовом Фрагменте 6.8 мы представляем внедрения членских функций для класса Iterator. Они все следуют непосредственно из определений, данных ранее.

NodeList:: Iterator:: Iterator (Узел* u)

v = u;Elem& NodeList:: Iterator:: оператор* ()

возвращают v-> элемент;

//конструктор от Узла*

//ссылка на элемент

//сравните положения

bool NodeList:: Iterator:: оператор == (константа Iterator& p) константа

возвращают v == p.v;bool NodeList:: Iterator:: оператор! = (константа Iterator& p) константа

возвращают v! = p.v;

//двиньтесь в следующее положение

NodeList::Iterator& NodeList:: Iterator:: оператор ++ ()

v = v-> затем; возвратитесь *это;

//двиньтесь в предыдущее положение

NodeList::Iterator& NodeList:: Iterator:: оператор - ()

v = v-> предыдущий; возвратитесь *это;

Кодовый Фрагмент 6.8: Внедрения функций члена Iterator.

244

Глава 6. Список и Iterator adTs

Чтобы сохранять кодекс простым, мы не осуществили проверки на ошибки. Мы предполагаем, что функции Кодового Фрагмента 6.8 определены вне тела класса. Из-за этого, отсылая к вложенному классу Iterator, мы должны применить оператора резолюции объема, как в NodeList:: Iterator, таким образом, компилятор знает, что мы обращаемся к типу iterator, связанному с NodeList. Заметьте, что incre-ment и операторы декремента не только обновляют положение, но и они также возвращают ссылку на обновленное положение. Это позволяет использовать результат операции по приращению, как в «q = ++ p».

Определив структуры поддержки Node и Iterator, давайте теперь представим декларацию класса NodeList, который дан в Кодовом Фрагменте 6.9. Декларация класса начинается, вставляя определения Node и Iterator из Кодекса Frag-чекан 6.6 и 6.7. Это сопровождается общественными участниками, которые состоят из простого конструктора по умолчанию и членов списка ADT. Мы опустили стандартные вспомогательные функции из нашего определения класса. Они включают класс destruc-скалистая вершина, конструктор копии и оператор назначения. Определение печи для сжигания отходов производства важно, так как этот класс ассигнует память, таким образом, необходимо удалить эту память, когда объект этого типа разрушен. Мы оставляем внедрение этих вспомогательных функций как упражнение (R-6.12).

Элемент интервала typedef;

класс NodeList

частный:

//вставьте декларацию Узла здесь... общественность:

//вставьте декларацию Iterator здесь... общественность:

NodeList (); международный размер () константа; пустой bool () константа; Iterator начинают () константу; конец Iterator () константа; пустота insertFront (константа Elem& e); пустота insertBack (константа Elem& e);

//перечислите основной тип элемента / / никакой de - bas редактор l i s t

//конструктор по умолчанию//размер списка//действительно ли список пуст?//исходное положение//(только вне) длятся положение//вставка на фронте//вставка с задней стороны

недействительная вставка (константа Iterator& p, константа Elem& e);//вставляют e прежде p

пустота eraseFront (); пустота eraseBack (); пустота стирает (константа Iterator& p);//вспомогательные функции опущены...

частный:

интервал n; N o de* заголовок; Узел* трейлер;

;

//удалите сначала//, удаляют в последний раз//, удаляют p

//участники данных//число пунктов//страж головы списка//страж хвоста списка

Кодовый Фрагмент 6.9: Класс NodeList, понимающий C ++-based, перечисляет ADT.