От издательства.................................................................................................... 12
Об авторе............................................................................................................. 13
Введение.............................................................................................................. 14
Назначение этой книги...........................................................................................14
Условные обозначения ...........................................................................................14
Примеры исходного кода.........................................................................................15
Исходный код.........................................................................................................15
Значение и объект..................................................................................................15
Признательности....................................................................................................15
Дальнейшая информация........................................................................................16
Циппи...................................................................................................................16
1. Стандартная библиотека................................................................................. 17
Краткий обзор....................................................................................................17
История..............................................................................................................17
Краткий обзор....................................................................................................18
Вспомогательные инструменты.............................................................................19
Стандартная библиотека шаблонов.......................................................................19
Библиотеки для работы с числами.........................................................................22
Библиотеки для работы с текстом..........................................................................22
Библиотека для работы с вводом и выводом данных..........................................23
Библиотеки для работы с многопоточностью.......................................................23
Использование библиотек................................................................................25
Вставка заголовочных файлов...............................................................................25
Импорт стандартной библиотеки..........................................................................25
Использование именных пространств..................................................................26
Сборка исполняемого файла..................................................................................28
2. Вспомогательные инструменты........................................................................ 29
Краткий обзор....................................................................................................29
Вспомогательные функции...............................................................................29
std::min, std::max и std::minmax................................................................................30
std::midpoint и std::lerp.............................................................................................31
std::move..................................................................................................................33
std::forward...............................................................................................................33
std::to_underlying.....................................................................................................35
std::swap...................................................................................................................35
Адаптеры функциональных единиц кода......................................................................35
std::bind....................................................................................................................35
std::bind_front (C++20).............................................................................................37
std::bind_back (C++23)..............................................................................................37
std::function.............................................................................................................37
Пары...................................................................................................................38
std::make_pair...........................................................................................................39
Кортежи..............................................................................................................39
std::make_tuple.........................................................................................................40
std::tie и std::ignore...................................................................................................40
Обертки вокруг ссылок......................................................................................41
std::ref и std::cref.....................................................................................................42
Умные указатели...............................................................................................43
std::unique_ptr..........................................................................................................44
Специальные удалители.........................................................................................47
std::make_unique......................................................................................................47
std::shared_ptr..........................................................................................................47
std::make_shared......................................................................................................48
std::shared_ptr из указателя this..............................................................................49
std::weak_ptr.............................................................................................................49
Циклические ссылки.........................................................................................51
Признаки типов.................................................................................................52
Проверка информации о типе................................................................................53
Отношения типов....................................................................................................56
Модификации типов...............................................................................................57
Операции на признаках..........................................................................................58
Отношения между членами...................................................................................59
Константно-вычисляемый контекст......................................................................59
Библиотека для работы со временем.....................................................................60
Временная точка.....................................................................................................61
Продолжительность времени.................................................................................62
Часы .........................................................................................................................64
Время дня.................................................................................................................65
Календарь................................................................................................................65
Часовой пояс............................................................................................................66
Функциональность библиотеки chrono по вводу-выводу ...................................68
Новые обобщенные типы std::any, std::optional и std::variant.............................68
3. Интерфейс всех контейнеров................................................................... 78
Краткий обзор....................................................................................................78
Создание и удаление.........................................................................................79
Размер контейнеров..........................................................................................80
Доступ к элементам контейнера......................................................................81
Присваивание и обмен контейнеров местами................................................83
Сравнение контейнеров....................................................................................84
Стирание контейнеров......................................................................................85
4. Контейнеры последовательностей.......................................................... 87
Краткий обзор....................................................................................................87
Массивы.............................................................................................................89
Векторы..............................................................................................................90
Размер в сопоставлении с емкостью................................................................91
Очередь с двусторонним доступом..................................................................93
Списки................................................................................................................94
Впереднаправленные списки...........................................................................96
5. Ассоциативные контейнеры......................................................................... 99
Краткий обзор....................................................................................................99
Проверка на наличие элемента............................................................................101
Вставка и удаление................................................................................................102
Упорядоченные ассоциативные контейнеры ............................................................103
Краткий обзор.......................................................................................................103
Ключи и значения.................................................................................................103
Критерий сравнения.............................................................................................104
Специальные функции поиска.............................................................................105
Неупорядоченные ассоциативные контейнеры......................................................107
Краткий обзор.......................................................................................................107
Ключи и значения.................................................................................................108
Производительность.............................................................................................108
Хеш-функция.........................................................................................................109
6. Адаптеры контейнеров.................................................................................. 112
Краткий обзор..................................................................................................112
Линейные контейнеры.........................................................................................112
Стек .......................................................................................................................113
Очередь..................................................................................................................114
Очередь с приоритетом........................................................................................115
Ассоциативные контейнеры...........................................................................116
std::sorted_unique.........................................................................................117
7. Виды на последовательности объектов....................................................... 118
Краткий обзор..................................................................................................118
Доступ к смежно расположенным объектам.....................................................118
Многомерный доступ......................................................................................122
8. Итераторы................................................................................................ 128
Краткий обзор..................................................................................................128
Категории итераторов.....................................................................................129
Критерий итератора........................................................................................130
Полезные функции..........................................................................................131
Адаптеры итераторов......................................................................................133
Итераторные адаптеры вставки...........................................................................133
Потоковые итераторные адаптеры......................................................................134
9. Вызываемые единицы кода........................................................................... 136
Краткий обзор..................................................................................................136
Функции...........................................................................................................137
Функциональные объекты .............................................................................137
Предопределенные функциональные объекты..................................................138
Лямбда-функции.............................................................................................139
10. Стандартные алгоритмы............................................................................. 140
Краткий обзор..................................................................................................140
Общепринятые правила.....................................................................................141
Итераторы как связующее звено........................................................................143
Последовательное, параллельное либо параллельно-векторизованное
исполнение ........................................................................................................143
Политики исполнения..........................................................................................143
Параллельные версии стандартных алгоритмов .....................................................145
for_each...............................................................................................................146
Немодифицирующие стандартные алгоритмы..........................................................148
Поиск элементов...................................................................................................148
Подсчет элементов................................................................................................149
Проверка условий на диапазонах........................................................................150
Сравнение диапазонов.........................................................................................151
Поиск диапазонов внутри диапазонов................................................................153
Модифицирующие стандартные алгоритмы ........................................................155
Копирование элементов и диапазонов...............................................................155
Замена элементов и диапазонов..........................................................................156
Удаление элементов и диапазонов......................................................................157
Заполнение и создание диапазонов....................................................................159
Перемещение диапазонов....................................................................................160
Обмен диапазонами.............................................................................................161
Преобразование диапазонов................................................................................161
Инверсия диапазонов ..........................................................................................162
Поворот диапазонов.............................................................................................163
Сдвиг диапазонов..................................................................................................164
Произвольная перетасовка диапазонов...................................................................165
Удаление дубликатов............................................................................................166
Разбиение диапазонов............................................................................................167
Сортировка............................................................................................................169
Двоичный поиск....................................................................................................171
Операции слияния...........................................................................................172
Кучи..................................................................................................................176
Минимум и максимум....................................................................................178
Перестановки...................................................................................................180
Численные алгоритмы....................................................................................181
Новые параллельные алгоритмы в стандарте C++17..........................................183
Неинициализированная память....................................................................187
11. Диапазоны............................................................................................. 189
Краткий обзор..................................................................................................189
Диапазон..........................................................................................................190
std::ranges...............................................................................................................190
Сторожок................................................................................................................191
Вид....................................................................................................................192
Адаптеры диапазонов.....................................................................................192
std::generator.........................................................................................................195
Работа прямо на контейнерах........................................................................195
Композиция функций.....................................................................................197
Ленивое оценивание.......................................................................................198
Алгоритмы из std в сопоставлении с алгоритмами из std::ranges.........................199
12. Числа....................................................................................................... 201
Краткий обзор..................................................................................................201
Случайные числа.............................................................................................201
Генератор случайных чисел..................................................................................201
Распределение случайных чисел.........................................................................202
Числовые функции, унаследованные у языка C............................................204
Математические константы...........................................................................206
13. Строковые объекты............................................................................... 208
Краткий обзор..................................................................................................208
Создание и удаление.......................................................................................210
Конвертация между последовательностями символов C++ и C...........................211
Размер в сопоставлении с емкостью..............................................................212
Сравнение........................................................................................................214
Конкатенация строковых объектов................................................................214
Доступ к элементам.........................................................................................215
Ввод и вывод данных......................................................................................216
Поиск................................................................................................................217
Проверка на наличие подпоследовательности символов.......................................220
Проверка на наличие префикса или суффикса...................................................220
Проверка на наличие содержащейся подпоследовательности символов...........220
Модифицирующие операции.........................................................................221
Числовые конвертации...................................................................................223
14. Виды на строковые объекты..................................................................... 226
Краткий обзор...................................................................................................226
Создание и инициализация............................................................................227
Немодифицирующие операции.....................................................................228
Модифицирующие операции.........................................................................228
15. Регулярные выражения........................................................................ 231
Краткий обзор..................................................................................................231
Типы символов................................................................................................232
Объекты регулярного выражения..................................................................233
Результат поиска match_results......................................................................234
std::sub_match..............................................................................................236
Совпадение......................................................................................................237
Поиск................................................................................................................238
Замена..............................................................................................................239
Форматирование.............................................................................................241
Повторный поиск............................................................................................242
std::regex_iterator.................................................................................................242
std::regex_token_iterator........................................................................................243
16. Потоки ввода и вывода............................................................................... 245
Краткий обзор..................................................................................................245
Иерархия..........................................................................................................246
Функции ввода и вывода.................................................................................247
Извлечение данных (ввод)....................................................................................248
Форматированное извлечение.............................................................................248
Неформатированное извлечение........................................................................249
Вставка данных (вывод)........................................................................................250
Конкретизатор формата.......................................................................................250
Потоки данных................................................................................................253
Строковые потоки.................................................................................................253
Файловые потоки..................................................................................................255
Произвольный доступ...........................................................................................257
Состояние потока данных....................................................................................258
Пользовательские типы данных.....................................................................260
17. Форматирование................................................................................... 262
Краткий обзор..................................................................................................262
Форматирующие функции..............................................................................262
std::vformat, std::vformat_to и std::make_format_args..........................................263
std::print и std::println.......................................................................................263
Синтаксис.........................................................................................................264
Конкретизация формата.................................................................................265
Символы заполнения и выравнивание текста....................................................265
Знак, ширина и прецизионность чисел...............................................................265
Типы данных....................................................................................................266
Пользовательский форматизатор..................................................................266
Форматирование контейнера std::vector............................................................267
18. Файловая система................................................................................. 269
Краткий обзор..................................................................................................269
Классы..............................................................................................................271
Манипулирование разрешениями на доступ к файлу........................................272
Функции-нечлены...........................................................................................273
Чтение и установка времени последней записи файла.....................................274
Информация о пространстве в файловой системе.............................................275
Типы файлов....................................................................................................276
Получение типа файла......................................................................................277
19. Многопоточность....................................................................................... 279
Краткий обзор..................................................................................................279
Модель памяти.................................................................................................279
Атомарные типы данных................................................................................280
std::atomic_flag............................................................................................. 280
std::atomic.....................................................................................................281
Фундаментальный интерфейс атомарных типов...............................................281
Пользовательские атомарные типы std::atomic<user-defined type>..................282
Все атомарные операции......................................................................................285
Потоки инструкций.........................................................................................287
std::thread...............................................................................................................287
Создание................................................................................................................287
Время жизни..........................................................................................................288
Аргументы.............................................................................................................289
Операции...............................................................................................................291
Автоматическое присоединение.........................................................................292
Сигнал остановки............................................................................................293
std::stop_token, std::stop_source и std::stop_callback...........................................294
Коллективные переменные................................................................................296
Гонка за данными..................................................................................................296
Мьютексы...............................................................................................................298
Взаимная бокировка.............................................................................................300
Блокировочные замки..........................................................................................302
Потокобезопасная инициализация......................................................................305
Потоково-локальные данные..............................................................................306
Условные переменные........................................................................................307
Семафоры.........................................................................................................310
Координационные типы......................................................................................312
std::latch...........................................................................................................312
std::barrier........................................................................................................314
Задания............................................................................................................315
Потоки инструкций в сопоставлении с заданиями.................................................315
Синхронизация..................................................................................................321
20. Сопрограммы.............................................................................................. 323
Краткий обзор...................................................................................................323
co_yield.............................................................................................................324
co_await .......................................................................................................... 324
Типы, допускающие ожидание............................................................................325
Бесконечный поток данных посредством co_yield.................................................325
Предметный указатель...................................................................................... 329
Книга представляет собой компактный справочник по стандартной библиотеке языка программирования C++, обновленной до версии стандарта С++23. В ней изложена вся необходимая информация, которую должен знать о стандартной библиотеке профессиональный программист на C++. Вы познакомитесь с различными библиотеками в рамках общей стандартной библиотеки и стандартной библиотеки шаблонов C++ и научитесь пользоваться мощным арсеналом вспомогательных инструментов.
Книга предназначена читателям, знакомым с программированием на C++ и желающим иметь под рукой удобное руководство по работе с новой версией стандарта.