Бьерн Страуструп. Язык программирования С++ Второе дополненное издание



Pdf көрінісі
бет166/256
Дата11.07.2022
өлшемі2,87 Mb.
#37591
1   ...   162   163   164   165   166   167   168   169   ...   256
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[]. 


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


Достарыңызбен бөлісу:
1   ...   162   163   164   165   166   167   168   169   ...   256




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет