Ваш город
Москва
Ваш город Москва?
+7 928 117-10-37
Отдел продаж
Режим работы:
Пн-Сб 10:00—18:00;
Вс выходной
КАТАЛОГ ТОВАРОВ
0КорзинаПусто0 руб.
Товары в корзине
корзина пуста
КАТАЛОГ ТОВАРОВ
Корзина пуста0 руб.0
Товары в корзине
корзина пуста
Корзина пуста0 руб.0
Товары в корзине
корзина пуста

Оглавление

Предисловие................................................................................................................12

Темы, рассмотренные в этой книге.........................................................................13
Что вам нужно для работы с книгой.......................................................................14
Для кого предназначено издание...........................................................................15
Разделы..................................................................................................................16
Условные обозначения...........................................................................................16
Загрузка примеров кода.........................................................................................17
Глава 1. Новые возможности С++17 ........................................................................ 18
Введение................................................................................................................18
Применяем структурированные привязки (декомпозицию)
для распаковки набора возвращаемых значений....................................................19
Ограничиваем область видимости переменных в выражениях if и switch................23
Новые правила инициализатора с фигурными скобками.........................................26
Разрешаем конструктору автоматически выводить полученный
тип класса шаблона................................................................................................28
Упрощаем принятие решений во время компиляции с помощью constexpr-if...........30
Подключаем библиотеки с помощью встраиваемых переменных............................33
Реализуем вспомогательные функции с помощью выражений свертки...................36
Глава 2. Контейнеры STL ......................................................................................... 43
Введение................................................................................................................43
Используем идиому erase-remove для контейнера std::vector..................................46
Удаляем элементы из неотсортированного объекта класса std::vector
за время O(1).........................................................................................................50
Получаем доступ к экземплярам класса std::vector быстрым или безопасным способом......53
Сохраняем сортировку экземпляров класса std::vector...........................................55
Вставляем элементы в контейнер std::map эффективно и в соответствии с условиями.......57
Исследуем новую семантику подсказок для вставки элементов с помощью метода std::map::insert..61
Эффективно изменяем ключи элементов std::map..................................................64
Применяем контейнер std::unordered_map для пользовательских типов.................67
Отсеиваем повторяющиеся слова из пользовательского ввода
и выводим их на экран в алфавитном порядке с помощью контейнера std::set.......70
Реализуем простой ОПН-калькулятор с использованием контейнера std::stack.......73
Подсчитываем частоту встречаемости слов с применением
контейнера std::map...............................................................................................79
Вспомогательный стилистический редактор для поиска длинных
предложений в текстах с помощью std::multimap...................................................82
Реализуем личный список текущих дел с помощью std::priority_queue....................87
Глава 3. Итераторы .................................................................................................. 91
Введение................................................................................................................91
Создаем собственный итерабельный диапазон данных...........................................95
Обеспечиваем совместимость собственных итераторов с категориями итераторов STL..98
Используем оболочки итераторов для заполнения обобщенных
структур данных...................................................................................................101
Реализуем алгоритмы с помощью итераторов.......................................................104
Перебор в обратную сторону с применением обратных адаптеров
для итераторов....................................................................................................108
Завершение перебора диапазонов данных с использованием
ограничителей.....................................................................................................110
Автоматическая проверка кода итераторов с помощью
проверяемых итераторов......................................................................................113
Создаем собственный адаптер для итераторов-упаковщиков................................117
Глава 4. Лямбда-выражения ................................................................................... 123
Введение..............................................................................................................123
Динамическое определение функций с помощью лямбда-выражений...................125
Добавляем полиморфизм путем оборачивания лямбда-выражений
в std::function.......................................................................................................129
Создаем функции методом конкатенации.............................................................132
Создаем сложные предикаты с помощью логической конъюнкции........................136
Вызываем несколько функций с одинаковыми входными данными.......................138
Реализуем функцию transform_if с применением std::accumulate
и лямбда-выражений............................................................................................141
Генерируем декартово произведение на основе любых входных данных
во время компиляции...........................................................................................146
Глава 5. Основы работы с алгоритмами STL ........................................................... 151
Введение..............................................................................................................151
Копируем элементы из одних контейнеров в другие.............................................153
Сортируем контейнеры.........................................................................................157
Удаляем конкретные элементы из контейнеров....................................................161
Преобразуем содержимое контейнеров................................................................164
Выполняем поиск элементов в упорядоченных и неупорядоченных векторах.......166
Ограничиваем допустимые значения вектора конкретным численным
диапазоном с помощью std::clamp........................................................................172
Находим шаблоны в строках с помощью функции std::search и выбираем оптимальную реализацию..175
Делаем выборку данных из крупных векторов......................................................179
Выполняем перестановки во входных последовательностях.................................182
Инструмент для слияния словарей.......................................................................184
Глава 6. Сложные случаи использования алгоритмов STL ...................................... 188
Введение..............................................................................................................188
Реализуем класс префиксного дерева с использованием алгоритмов STL.............189
Создаем генератор поисковых подсказок с помощью
префиксных деревьев...........................................................................................194
Реализуем формулу преобразования Фурье с применением численных алгоритмов STL............199
Определяем ошибку суммы двух векторов............................................................207
Реализуем отрисовщик множества Мандельброта в ASCII.....................................210
Создаем собственный алгоритм split.....................................................................215
Создаем полезные алгоритмы на основе стандартных алгоритмов gather.............219
Удаляем лишние пробелы между словами............................................................223
Компрессия и декомпрессия строк........................................................................225
Глава 7. Строки, классы потоков и регулярные выражения .................................... 229
Введение..............................................................................................................229
Создание, конкатенация и преобразование строк.................................................231
Удаляем пробелы из начала и конца строк...........................................................234
Преимущества использования std::string без затрат
на создание объектов std::string...........................................................................236
Считываем значения из пользовательского ввода................................................240
Подсчитываем все слова в файле.........................................................................243
Форматируем ваши выходные данные с помощью манипуляторов
потока ввода-вывода............................................................................................245
Инициализируем сложные объекты из файла вывода...........................................251
Заполняем контейнеры с применением итераторов std::istream............................254
Выводим любые данные на экран с помощью итераторов std::ostream.................258
Перенаправляем выходные данные в файл для конкретных разделов кода..........262
Создаем пользовательские строковые классы путем
наследования std::char_traits................................................................................266
Токенизация входных данных с помощью библиотеки для работы
с регулярными выражениями...............................................................................271
Удобный и красивый динамический вывод чисел на экран в зависимости
от контекста.........................................................................................................275
Перехватываем читабельные исключения для ошибок потока std::iostream..........277
Глава 8. Вспомогательные классы .......................................................................... 281
Введение..............................................................................................................281
Преобразуем единицы измерения времени с помощью std::ratio ..........................282
Выполняем преобразование между абсолютными и относительными
значениями с использованием std::chrono............................................................287
Безопасно извещаем о сбое с помощью std::optional............................................290
Применяем функции для кортежей.......................................................................293
Быстрое создание структур данных с помощью std::tuple.....................................296
Замена void* с использованием std::any для повышения безопасности типов.......303
Хранение разных типов с применением std::variant..............................................306
Автоматическое управление ресурсами с помощью std::unique_ptr.......................311
Автоматическое управление разделяемой памятью кучи
с использованием std::shared_ptr.........................................................................314
Работаем со слабыми указателями на разделяемые объекты................................320
Упрощаем управление ресурсами устаревших API с применением
умных указателей.................................................................................................324
Открываем доступ к разным переменным — членам одного объекта....................327
Генерируем случайные числа и выбираем правильный генератор
случайных чисел..................................................................................................330
Генерируем случайные числа и создаем конкретные распределения
с помощью STL.....................................................................................................335
Глава 9. Параллелизм и конкурентность ................................................................ 343
Введение..............................................................................................................343
Автоматическое распараллеливание кода, использующего стандартные
алгоритмы............................................................................................................344
Приостанавливаем программу на конкретный промежуток времени.....................350
Запускаем и приостанавливаем потоки.................................................................352
Выполняем устойчивую к исключениям общую блокировку
с помощью std::unique_lock и std::shared_lock......................................................356
Избегаем взаимных блокировок с применением std::scoped_lock..........................363
Синхронизация конкурентного использования std::cout........................................366
Безопасно откладываем инициализацию с помощью std::call_once.......................370
Отправляем выполнение задач в фоновый режим с применением std::async........372
Реализуем идиому «производитель/потребитель»
с использованием std::condition_variable...............................................................377
Реализуем идиому «несколько производителей/потребителей»
с помощью std::condition_variable.........................................................................381
Распараллеливание отрисовщика множества Мандельброта в ASCII
с применением std::async.....................................................................................387
Небольшая автоматическая библиотека для распараллеливания
с использованием std::future................................................................................391
Глава 10. Файловая система .................................................................................. 400
Введение..............................................................................................................400
Реализуем нормализатор пути файла...................................................................401
Получаем канонические пути к файлам из относительных путей..........................404
Составляем список всех файлов в каталоге..........................................................407
Инструмент текстового поиска в стиле grep..........................................................412
Инструмент для автоматического переименования файлов..................................415
Создаем индикатор эксплуатации диска...............................................................418
Подбиваем статистику о типах файлов.................................................................420
Инструмент для уменьшения размера папки путем замены дубликатов
символьными ссылками........................................................................................423
Об авторе..................................................................................................................428
О рецензенте.............................................................................................................429

Мы используем файлы cookie, чтобы сайт был лучше для вас.