УДК 004.4
ББК 32.973.202-018.2
Б23
Б23 Мариус Бансила
Решение задач на современном C++ / пер. с англ. А. Н. Киселева – М.: ДМК Пресс,
2019. – 302 с.: ил.
ISBN 978-5-97060-666-7
Эта книга – сборник практических задач по языку С++17: от математических
и вычислительных до архитектурных, построенных на базе шаблонов проектирования.
Здесь собрано 100 задач, которые помогут вам применить на практике
разнообразные возможности C++ и его стандартной библиотеки, а также опробовать
множество сторонних, кроссплатформенных библиотек. Решения представлены
в виде исходного кода, пояснений и рекомендаций к нему.
Книга рекомендована сообществом разработчиков С++ России и Беларуси.
Издание будет полезно студентам технических вузов, а также начинающим и
опытным разработчикам.
УДК 004.4
ББК 32.973.202-018.2
Все права защищены. Любая часть этой книги не может быть воспроизведена в
какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения
владельцев авторских прав.
Материал, изложенный в данной книге, многократно проверен. Но, поскольку вероятность
технических ошибок все равно существует, издательство не может гарантировать
абсолютную точность и правильность приводимых сведений. В связи с этим издательство
не несет ответственности за возможные ошибки, связанные с использованием книги.
ISBN 978-1-78899-386-9 (англ.)
ISBN 978-5-97060-666-7 (рус.)
Copyright © 2018 Packt Publishing.
© Оформление, перевод на русский язык, издание,
ДМК Пресс, 2019
Стр.5
Оглавление
Вступительное слово от сообщества разработчиков России и Беларуси .... 12
Об авторе ................................................................................................................ 13
О рецензентах ........................................................................................................ 14
О чем рассказывается в книге ............................................................................. 15
Вступление .............................................................................................................. 17
Кому адресована эта книга .........................................................................................................18
Что необходимо, чтобы извлечь максимум пользы из книги .......................................18
Скачивание исходного кода примеров .................................................................................19
Сборка примеров ............................................................................................................................19
Как сгенерировать проекты для Visual Studio 2017 ..........................................................20
Как сгенерировать проекты для Xcode ...................................................................................20
Соглашения........................................................................................................................................21
Отзывы и пожелания .....................................................................................................................22
Список опечаток ..............................................................................................................................23
Нарушение авторских прав ........................................................................................................23
Глава 1. Математические задачи ......................................................................... 24
Задачи .................................................................................................................................................24
1. Сумма натуральных чисел, кратных 3 и 5 ..........................................................................24
2. Наибольший общий делитель .................................................................................................24
3. Наименьшее общее кратное ...................................................................................................24
4. Наибольшее простое число меньше заданного ..............................................................24
5. Простые числа, отличающиеся на шесть ............................................................................24
6. Избыточные числа .......................................................................................................................24
7. Дружественные числа .................................................................................................................25
8. Числа Армстронга ........................................................................................................................25
9. Простые множители числа .......................................................................................................25
10. Код Грея .........................................................................................................................................25
11. Преобразование десятичных чисел в римские ............................................................25
12. Наибольшая последовательность Коллатца ...................................................................25
13. Вычисление значения числа π ............................................................................................25
14. Проверка действительности номеров ISBN ...................................................................25
Решения ..............................................................................................................................................25
1. Сумма натуральных чисел, кратных 3 и 5 ..........................................................................25
2. Наибольший общий делитель .................................................................................................26
3. Наименьшее общее кратное ...................................................................................................27
Стр.6
6 Оглавление
4. Наибольшее простое число меньше заданного ..............................................................27
5. Простые числа, отличающиеся на шесть ............................................................................28
6. Избыточные числа .......................................................................................................................29
7. Дружественные числа .................................................................................................................30
8. Числа Армстронга ........................................................................................................................31
9. Простые множители числа .......................................................................................................32
10. Код Грея .........................................................................................................................................33
11. Преобразование десятичных чисел в римские ............................................................34
12. Наибольшая последовательность Коллатца ...................................................................36
13. Вычисление значения числа π ............................................................................................37
14. Проверка действительности номеров ISBN ...................................................................38
Глава 2. Особенности языка ................................................................................. 40
Задачи .................................................................................................................................................40
15. Тип данных IPv4 .........................................................................................................................40
16. Перечисление адресов IPv4 в заданном диапазоне ..................................................40
17. 2-мерный массив с поддержкой базовых операций ..................................................40
18. Функция выбора минимального значения с переменным числом
аргументов ...................................................................................................................................40
19. Добавление диапазона значений в контейнер ............................................................40
20. Проверка наличия в контейнере любого, всех и ни одного из указанных
значений .......................................................................................................................................41
21. Обертка для системных дескрипторов.............................................................................41
22. Литералы разных температурных шкал ...........................................................................41
Решения ..............................................................................................................................................41
15. Тип данных IPv4 .........................................................................................................................41
16. Перечисление адресов IPv4 в заданном диапазоне ..................................................43
17. 2-мерный массив с поддержкой базовых операций ..................................................45
18. Функция выбора минимального значения с переменным числом
аргументов ...................................................................................................................................47
19. Добавление диапазона значений в контейнер ............................................................48
20. Проверка наличия в контейнере любого, всех и ни одного из указанных
значений .......................................................................................................................................49
21. Обертка для системных дескрипторов.............................................................................50
22. Литералы разных температурных шкал ...........................................................................54
Глава 3. Строки и регулярные выражения ......................................................... 59
Задачи .................................................................................................................................................59
23. Преобразование чисел в строки .........................................................................................59
24. Преобразование строк в числа ...........................................................................................59
25. Преобразование в верхний регистр первых букв слов ............................................59
26. Объединение строк через разделитель ...........................................................................59
27. Разбиение строк на лексемы по разделителям из списка ........................................60
28. Наибольшая подстрока-палиндром ..................................................................................60
29. Проверка номерного знака ...................................................................................................60
30. Извлечение частей URL ..........................................................................................................60
Стр.7
Оглавление 7
31. Преобразование дат в строках ............................................................................................60
Решения ..............................................................................................................................................60
23. Преобразование чисел в строки .........................................................................................60
24. Преобразование строк в числа ...........................................................................................61
25. Преобразование в верхний регистр первых букв слов ............................................63
26. Объединение строк через разделитель ...........................................................................64
27. Разбиение строк на лексемы по разделителям из списка ........................................65
28. Наибольшая подстрока-палиндром ..................................................................................66
29. Проверка номерного знака ...................................................................................................68
30. Извлечение частей URL ..........................................................................................................69
31. Преобразование дат в строках ............................................................................................71
Глава 4. Потоки данных и файловые системы .................................................. 72
Задачи .................................................................................................................................................72
32. Треугольник Паскаля ................................................................................................................72
33. Табличный вывод списка процессов .................................................................................72
34. Удаление пустых строк из текстового файла .................................................................72
35. Определение размера каталога ..........................................................................................72
36. Удаление файлов старше заданной даты ........................................................................73
37. Поиск файлов в каталоге, соответствующих регулярному выражению ..............73
38. Временные файлы журналов ...............................................................................................73
Решения ..............................................................................................................................................73
32. Треугольник Паскаля ................................................................................................................73
33. Табличный вывод списка процессов .................................................................................74
34. Удаление пустых строк из текстового файла .................................................................76
35. Определение размера каталога ..........................................................................................77
36. Удаление файлов старше заданной даты ........................................................................78
37. Поиск файлов в каталоге, соответствующих регулярному выражению ..............80
38. Временные файлы журналов ...............................................................................................81
Глава 5. Дата и время ............................................................................................ 83
Задачи .................................................................................................................................................83
39. Измерение времени выполнения функции ....................................................................83
40. Число дней между двумя датами .......................................................................................83
41. День недели .................................................................................................................................83
42. День и неделя года ...................................................................................................................83
43. Время встречи для нескольких часовых поясов ..........................................................83
44. Календарь на месяц .................................................................................................................83
Решения ..............................................................................................................................................84
39. Измерение времени выполнения функции ....................................................................84
40. Число дней между двумя датами .......................................................................................85
41. День недели .................................................................................................................................86
42. День и неделя года ...................................................................................................................87
43. Время встречи для нескольких часовых поясов ..........................................................88
44. Календарь на месяц .................................................................................................................90
Стр.8
8 Оглавление
Глава 6. Алгоритмы и структуры данных ........................................................... 92
Задачи .................................................................................................................................................92
45. Приоритетная очередь ............................................................................................................92
46. Циклический буфер ..................................................................................................................92
47. Двойной буфер ...........................................................................................................................93
48. Самый часто встречающийся элемент в диапазоне ...................................................93
49. Текстовая гистограмма ............................................................................................................93
50. Фильтрация списка телефонных номеров ......................................................................93
51. Преобразование списка телефонных номеров ............................................................93
52. Генерация всех перестановок символов в строке .......................................................94
53. Средний рейтинг фильмов ....................................................................................................94
54. Алгоритм объединения в пары ............................................................................................94
55. Алгоритм «сшивания» ..............................................................................................................94
56. Алгоритм выбора .......................................................................................................................94
57. Алгоритм сортировки ...............................................................................................................95
58. Кратчайший путь между узлами .........................................................................................95
59. Программа Weasel ....................................................................................................................96
60. Игра «Жизнь» ..............................................................................................................................96
Решения ..............................................................................................................................................97
45. Приоритетная очередь ............................................................................................................97
46. Циклический буфер ..................................................................................................................99
47. Двойной буфер ........................................................................................................................ 103
48. Самый часто встречающийся элемент в диапазоне ................................................ 105
49. Текстовая гистограмма ......................................................................................................... 107
50. Фильтрация списка телефонных номеров ................................................................... 108
51. Преобразование списка телефонных номеров ......................................................... 109
52. Генерация всех перестановок символов в строке .................................................... 111
53. Средний рейтинг фильмов ................................................................................................. 113
54. Алгоритм объединения в пары ......................................................................................... 114
55. Алгоритм «сшивания» ........................................................................................................... 115
56. Алгоритм выбора .................................................................................................................... 117
57. Алгоритм сортировки ............................................................................................................ 117
58. Кратчайший путь между узлами ...................................................................................... 121
59. Программа Weasel ................................................................................................................. 125
60. Игра «Жизнь» ........................................................................................................................... 128
Глава 7. Конкуренция ...........................................................................................133
Задачи ..............................................................................................................................................133
61. Алгоритм параллельного преобразования .................................................................. 133
62. Параллельные алгоритмы поиска максимального и минимального
значений с использованием потоков............................................................................. 133
63. Параллельные алгоритмы поиска максимального и минимального
значений с использованием асинхронных функций .............................................. 133
64. Параллельный алгоритм сортировки ............................................................................. 133
65. Потокобезопасное журналирование в консоль ......................................................... 134
66. Система обслуживания клиентов .................................................................................... 134
Стр.9
Оглавление 9
Решения ...........................................................................................................................................134
61. Алгоритм параллельного преобразования .................................................................. 134
62. Параллельные алгоритмы поиска максимального и минимального
значений с использованием потоков............................................................................. 136
63. Параллельные алгоритмы поиска максимального и минимального
значений с использованием асинхронных функций .............................................. 138
64. Параллельный алгоритм сортировки ............................................................................. 140
65. Потокобезопасное журналирование в консоль ......................................................... 142
66. Система обслуживания клиентов .................................................................................... 143
Глава 8. Шаблоны проектирования ..................................................................148
67. Проверка пароля ..................................................................................................................... 148
68. Генерация случайных паролей ......................................................................................... 148
69. Генерация номеров социального страхования .......................................................... 148
70. Система одобрений ............................................................................................................... 149
71. Контейнер с наблюдателями ............................................................................................. 149
72. Вычисление стоимости заказа с учетом скидок ........................................................ 149
Решения ...........................................................................................................................................150
67. Проверка пароля ..................................................................................................................... 150
68. Генерация случайных паролей ......................................................................................... 154
69. Генерация номеров социального страхования .......................................................... 158
70. Система одобрений ............................................................................................................... 162
71. Контейнер с наблюдателями ............................................................................................. 166
72. Вычисление стоимости заказа с учетом скидок ........................................................ 171
Глава 9. Сериализация данных ..........................................................................177
Задачи .............................................................................................................................................. 177
73. Сериализация и десериализация данных в формате XML.................................... 177
74. Выборка данных из XML с помощью XPath ................................................................ 177
75. Сериализация данных в формат JSON ........................................................................... 178
76. Десериализация данных из формата JSON ................................................................. 178
77. Вывод списка фильмов в файл PDF ................................................................................ 178
78. Создание документа PDF из коллекции изображений ........................................... 179
Решения ...........................................................................................................................................179
73. Сериализация и десериализация данных в формате XML.................................... 179
74. Выборка данных из XML с помощью XPath ................................................................ 183
75. Сериализация данных в формат JSON ........................................................................... 185
76. Десериализация данных из формата JSON ................................................................. 187
77. Вывод списка фильмов в файл PDF ................................................................................ 189
78. Создание документа PDF из коллекции изображений ........................................... 193
Глава 10. Архивы, изображения и базы данных.............................................196
Задачи ..............................................................................................................................................196
79. Поиск файлов в архиве ZIP ................................................................................................ 196
80. Упаковка и извлечение файлов из архива ZIP ........................................................... 196
81. Упаковка и извлечение файлов из архива ZIP с защитой паролем .................. 196
Стр.10
10 Оглавление
82. Создание файла PNG с изображением национального флага ............................ 196
83. Создание изображения PNG с контрольным текстом ............................................. 197
84. Генератор штрихкодов EAN-13 ....................................................................................... 197
85. Чтение информации о фильмах из базы данных SQLite ....................................... 198
86. Добавление информации о фильмах в базу данных SQLite ................................ 198
87. Обработка изображений для фильмов в базе данных SQLite ............................. 198
Решения ...........................................................................................................................................199
79. Поиск файлов в архиве ZIP ................................................................................................ 199
80. Упаковка и извлечение файлов из архива ZIP ........................................................... 201
81. Упаковка и извлечение файлов из архива ZIP с защитой паролем .................. 204
82. Создание файла PNG с изображением национального флага ............................ 207
83. Создание изображения PNG с контрольным текстом ............................................. 208
84. Генератор штрихкодов EAN-13 ....................................................................................... 211
85. Чтение информации о фильмах из базы данных SQLite ....................................... 217
86. Добавление информации о фильмах в базу данных SQLite ................................ 223
87. Обработка изображений для фильмов в базе данных SQLite ............................. 227
Глава 11. Криптография ......................................................................................236
Задачи ..............................................................................................................................................236
88. Шифр Цезаря ........................................................................................................................... 236
89. Шифр Виженера ...................................................................................................................... 236
90. Кодирование и декодирование Base64 ........................................................................ 236
91. Проверка учетных данных пользователя ..................................................................... 236
92. Вычисление хеш-суммы файла ........................................................................................ 236
93. Шифрование и расшифровывание файлов ................................................................ 237
94. Подписывание файлов ......................................................................................................... 237
Решения ........................................................................................................................................... 237
88. Шифр Цезаря ........................................................................................................................... 237
89. Шифр Виженера ...................................................................................................................... 239
90. Кодирование и декодирование Base64 ........................................................................ 241
91. Проверка учетных данных пользователя ..................................................................... 246
92. Вычисление хеш-суммы файла ........................................................................................ 250
93. Шифрование и расшифровывание файлов ................................................................ 252
94. Подписывание файлов ......................................................................................................... 254
Глава 12. Сети и службы......................................................................................258
Задачи ..............................................................................................................................................258
95. Поиск IP-адреса хоста .......................................................................................................... 258
96. Клиент-серверная игра Fizz-Buzz .................................................................................... 258
97. Обменный курс биткойна .................................................................................................... 258
98. Получение почты по протоколу IMAP ............................................................................ 258
99. Перевод текста на любой язык ......................................................................................... 259
100. Определение лиц на изображениях ............................................................................ 259
Решения ...........................................................................................................................................259
95. Поиск IP-адреса хоста .......................................................................................................... 259
96. Клиент-серверная игра Fizz-Buzz .................................................................................... 261
Стр.11
Оглавление 11
97. Обменный курс биткойна .................................................................................................... 265
98. Получение почты по протоколу IMAP ............................................................................ 270
99. Перевод текста на любой язык ......................................................................................... 274
100. Определение лиц на изображениях ............................................................................ 279
Библиография ......................................................................................................291
Статьи ................................................................................................................................................291
Документация к библиотекам ................................................................................................293
Предметный указатель .......................................................................................295
Стр.12