Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
С++ Страуструп.doc
Скачиваний:
4
Добавлен:
18.04.2019
Размер:
2.72 Mб
Скачать

8.9 Упражнения

1. (*2) Определите семейство списков с двойной связью, которые

будут двойниками списков с одной связью, определенных в $$8.3.

2. (*3) Определите шаблон типа String, параметром которого является

тип символа. Покажите как его можно использовать не только для

обычных символов, но и для гипотетического класса lchar, который

представляет символы не из английского алфавита или расширенный

набор символов. Нужно постараться так определить String, чтобы

пользователь не заметил ухудшения характеристик программы по

памяти и времени или в удобстве по сравнению с обычным строковым

классом.

3. (*1.5) Определите класс Record (запись) с двумя членами-данными:

count (количество) и price (цена). Упорядочите вектор из таких

записей по каждому из членов. При этом нельзя изменять функцию

сортировки и шаблон Vector.

4. (*2) Завершите определения шаблонного класса Map, написав

недостающие функции-члены.

5. (*2) Задайте другую реализацию Map из $$8.8, используя списочный

класс с двойной связью.

6. (*2.5) Задайте другую реализацию Map из $$8.8, используя

сбалансированное дерево. Такие деревья описаны в $$6.2.3 книги

Д. Кнут "Искусство программирования для ЭВМ" т.1, "Мир", 1978 [K].

7. (*2) Сравните качество двух реализаций Map. В первой используется

класс Link со своей собственной функцией размещения, а во второй

- без нее.

8. (*3) Сравните производительность программы подсчета слов из

$$8.8 и такой же программы, не использующей класса Map. Операции

ввода-вывода должны одинаково использоваться в обеих программах.

Сравните несколько таких программ, использующих разные варианты

класса Map, в том числе и класс из вашей библиотеки, если он там

есть.

9. (*2.5) С помощью класса Map реализуйте топологическую сортировку.

Она описана в [K] т.1, стр. 323-332. (см. упражнение 6).

10. (*2) Модифицируйте программу из $$8.8 так, чтобы она работала

правильно для длинных имен и для имен, содержащих пробелы

(например, "thumb back").

11. (*2) Определите шаблон типа для чтения различных видов строк,

например, таких (предмет, количество, цена).

12. (*2) Определите класс Sort из $$8.4.5, использующий сортировку

по методу Шелла. Покажите как можно задать метод сортировки

с помощью параметра шаблона. Алгоритм сортировки описан в [K]

т.3, $$5.2.1 (см. упражнение 6).

13. (*1) Измените определения Map и Mapiter так, чтобы постфиксные

операции ++ и -- возвращали объект Mapiter.

14. (*1.5) Используйте шаблоны типа в стиле модульного

программирования, как это было показано в $$8.4.5 и напишите

функцию сортировки, рассчитанную сразу на Vector<T> и T[].

* ГЛАВА 9

Я прервал вас, поэтому не прерывайте меня.

- Уинстон Черчилл

В этой главе описан механизм обработки особых ситуаций и некоторые,

основывающиеся на нем, способы обработки ошибок. Механизм состоит

в запуске особой ситуации, которую должен перехватить специальный

обработчик. Описываются правила перехвата особых ситуаций и

правила реакции на неперехваченные и неожиданные особые ситуации.

Целые группы особых ситуаций можно определить как производные

классы. Описывается способ, использующий деструкторы и обработку

особых ситуаций, который обеспечивает надежное и скрытое от

пользователя управление ресурсами.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]