Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КРАТКИЙ ОБЗОР С.doc
Скачиваний:
1
Добавлен:
26.10.2018
Размер:
2.11 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

      Я прервал вас, поэтому не прерывайте меня.       - Уинстон Черчилл       В этой главе описан механизм обработки особых ситуаций и некоторые,       основывающиеся на нем, способы обработки ошибок. Механизм состоит       в запуске особой ситуации, которую должен перехватить специальный       обработчик. Описываются правила перехвата особых ситуаций и       правила реакции на неперехваченные и неожиданные особые ситуации.       Целые группы особых ситуаций можно определить как производные       классы. Описывается способ, использующий деструкторы и обработку       особых ситуаций, который обеспечивает надежное и скрытое от       пользователя управление ресурсами.