Программирование. Принципы и практика использования C++ Исправленное издание
Шрифт:
3.2. Скопируйте значения из вектора
3.3. Выведите на печать элементы вектора
3.4. Определите локальный вектор
3.5. Выведите на печать элементы вектора
4. В функции
4.1. Вызовите функцию
4.2. Определите вектор
4.3. Вызовите функцию
Контрольные вопросы
1. Что означает выражение “Покупатель, будь бдителен!”?
2. Какое копирование объектов класса используется по умолчанию?
3. Когда копирование объектов класса, используемое по умолчанию, является приемлемым, а когда нет?
4. Что такое конструктор копирования?
5. Что такое копирующее присваивание?
6. В чем разница между копирующим присваиванием и копирующей инициализацией?
7. Что такое поверхностное копирование? Что такое глубокое копирование?
8. Как копия объекта класса vector сравнивается со своим прототипом?
9. Перечислите пять основных операций над классом.
10. Что собой представляет конструктор с ключевым словом
11. Какие операции могут применяться к объекту класса неявно?
12. Что такое массив?
13. Как скопировать массив?
14. Как инициализировать массив?
15. Когда передача указателя на аргумент предпочтительнее передачи его по ссылке и почему?
16. Что такое строка в стиле С, или С-строка?
17. Что такое палиндром?
Термины
Упражнения
1. Напишите функцию
2. Напишите функцию
3. Напишите функцию
4. Что случится, если передать функциям
5. Напишите функцию
6. Модифицируйте функцию
7. Напишите варианты функции
8. Перепишите все функции, приведенные в разделе 18.6, используя для сравнения обратную копию строки; например, введите строку "
9. Проанализируйте схему распределения памяти, описанную в разделе 17.4. Напишите программу, сообщающую, в каком порядке выделяется статическая память, стек и свободная память. В каком направлении растет стек: в сторону старших или младших адресов? Допустим, массив расположен в свободной памяти. Какой элемент будет иметь больший адрес — с большим индексом или с меньшим?
10. Проанализируйте решение задачи о палиндроме из раздела 18.6.2 на основе массива 10. Исправьте его так, чтобы можно было работать с длинными строками: 1) выдавайте сообщение, если введенная строка оказалась слишком длинной; 2) разрешите произвольно длинные строки. Прокомментируйте сложность обеих версий.
11. Разберитесь, что собой представляет список с пропусками (skip list), и реализуйте эту разновидность списка. Это не простое упражнение.
12. Реализуйте версию игры “Охота на Вампуса” (или просто “Вамп”). Это простая компьютерная (не графическая) игра, изобретенная Грегори Йобом (Gregory Yob). Цель этой игры — найти довольно смышленого монстра, прячущегося в темном пещерном лабиринте. Ваша задача — убить вампуса с помощью лука и стрел. Кроме вампуса, пещера таит еще две опасности: бездонные ямы и гигантские летучие мыши. Если вы входите в комнату с бездонной ямой, то игра для вас закончена. Если вы входите в комнату с летучей мышью, то она вас хватает и перебрасывает в другую комнату. Если же вы входите в комнату с вампусом или он входит в комнату, где находитесь вы, он вас съедает. Входя в комнату, вы должны получить предупреждение о грозящей опасности.
“Я чувствую запах вампуса” — значит, он в соседней комнате.
“Я чувствую ветерок” — значит, в соседней комнате яма.
“Я слышу летучую мышь” — значит, в соседней комнате живет летучая мышь.
Для вашего удобства комнаты пронумерованы. Каждая комната соединена туннелями с тремя другими. Когда вы входите в комнату, то получаете сообщение, например: “Вы в комнате номер 12; отсюда идут туннели в комнаты 1, 13 и 4; идти или стрелять?” Возможные ответы:
Вероятно, самой сложной частью этого упражнения является программирование пещеры и выбор комнат, связанных с другими комнатами. Возможно, вы захотите использовать датчик случайных чисел (например, функцию
Послесловие