7. Запишите пять имен в вектор vector
vector age
. Затем выведите на печать пять пар (name[i],age[i])
. Упорядочьте имена (sort(name.begin, name.end))
и выведите на печать пары (name[i], age[i])
. Сложность здесь заключается в том, чтобы получить вектор age
, в котором порядок следования элементов соответствовал бы порядку следования элементов вектора name
. (Подсказка: перед сортировкой вектора name
создайте его копию и используйте ее для получения упорядоченного вектора age
. Затем выполните упражнение снова, разрешив использование произвольного количества имен).8. Напишите простую функцию randint
[0:MAXINT]
. (Подсказка: Д. Кнут 9. Напишите функцию, которая с помощью функции randint
rand_in_range(int a, int b)
. Примечание: эта функция очень полезна для создания простых игр.10. Напишите функцию, которая по двум объектам, price
weight
, класса vector
вычисляет значение (“индекс”), равное сумме всех произведений price[i]*weight[i]
. Заметьте, что должно выполняться условие weight.size<=price.size
.11. Напишите функцию maxv
12. Напишите функцию, которая находит наименьший и наибольший элементы вектора, являющегося ее аргументом, а также вычисляющую их среднее и медиану. Результаты можно вернуть либо в виде структуры struct
13. Усовершенствуйте функцию print_until_s
print_until_ss
, которая выводит на печать сроки, пока не обнаружит строку аргумента quit
.14. Напишите функцию, принимающую аргумент типа vector
vector
, содержащий количество символов в каждой строке. Кроме того, найдите самую короткую и самую длинную строки, а также первую и последнюю строки в соответствии с лексикографическим порядком Сколько отдельных функций вы использовали бы для решения этой задачи? Почему?15. Можно ли объявить константный аргумент функции, который передается не по ссылке (например, void f(const int);)
Послесловие
Большую часть этой (и следующей) главы можно было бы вынести в приложение. Однако в части II нам потребуются многие средства, описанные здесь. Кроме того, очень скоро мы столкнемся с проблемами, для решения которых эти средства были изобретены. При написании простых программ вы неизбежно должны будете решать такие проблемы. Итак, для того чтобы сэкономить время и минимизировать недоразумения, необходим систематический подход, а не серия “случайных” ссылок на справочное руководство и приложения.
Глава 9. Технические детали: классы и прочее
“Помните, все требует времени”.
Пит Хейн (Piet Hein)
В этой главе мы сосредоточим внимание на основном инструменте программирования: языке С++. Мы опишем технические подробности этого языка, связанные в основном с типами, определенными пользователем, иначе говоря, с классами и перечислениями. Описание свойств языка излагается на примере постепенной разработки типа Date
9.1. Типы, определенные пользователем
char
int
и double
(подробнее они описаны в разделе A.8). Тип называется встроенным, если компилятор знает, как представить объекты такого типа и какие операторы к нему можно применять (такие как +
и –
) без уточнений в виде объявлений, которые создает программист в исходном коде.