Темы, рассмотренные в этой книге
Что вам нужно для работы с книгой
Для кого предназначено издание
Глава 1. Новые возможности С++17
Применяем структурированные привязки (декомпозицию) для распаковки набора возвращаемых значений
Ограничиваем область видимости переменных в выражениях if и switch
Новые правила инициализатора с фигурными скобками
Разрешаем конструктору автоматически выводить полученный тип класса шаблона
Упрощаем принятие решений во время компиляции с помощью constexpr-if
Подключаем библиотеки с помощью встраиваемых переменных
Реализуем вспомогательные функции с помощью выражений свертки
Используем идиому erase-remove для контейнера std::vector
Удаляем элементы из неотсортированного объекта класса std::vector за время O(1)
Получаем доступ к экземплярам класса std::vector быстрым или безопасным способом
Сохраняем сортировку экземпляров класса std::vector
Вставляем элементы в контейнер std::map эффективно и в соответствии с условиями
Исследуем новую семантику подсказок для вставки элементов с помощью метода std::map::insert
Эффективно изменяем ключи элементов std::map
Применяем контейнер std::unordered_map для пользовательских типов
Реализуем простой ОПН-калькулятор с использованием контейнера std::stack
Подсчитываем частоту встречаемости слов с применением контейнера std::map
Реализуем личный список текущих дел с помощью std::priority_queue
Создаем собственный итерабельный диапазон данных
Обеспечиваем совместимость собственных итераторов с категориями итераторов STL
Используем оболочки итераторов для заполнения обобщенных структур данных
Реализуем алгоритмы с помощью итераторов
Перебор в обратную сторону с применением обратных адаптеров для итераторов
Завершение перебора диапазонов данных с использованием ограничителей
Автоматическая проверка кода итераторов с помощью проверяемых итераторов
Создаем собственный адаптер для итераторов-упаковщиков
Динамическое определение функций с помощью лямбда-выражений
Добавляем полиморфизм путем оборачивания лямбда-выражений в std::function
Создаем функции методом конкатенации
Создаем сложные предикаты с помощью логической конъюнкции
Вызываем несколько функций с одинаковыми входными данными
Реализуем функцию transform_if с применением std::accumulate и лямбда-выражений
Генерируем декартово произведение на основе любых входных данных во время компиляции
Глава 5. Основы работы с алгоритмами STL
Копируем элементы из одних контейнеров в другие
Удаляем конкретные элементы из контейнеров
Преобразуем содержимое контейнеров
Выполняем поиск элементов в упорядоченных и неупорядоченных векторах
Ограничиваем допустимые значения вектора конкретным численным диапазоном с помощью std::clamp
Находим шаблоны в строках с помощью функции std::search и выбираем оптимальную реализацию
Делаем выборку данных из крупных векторов
Выполняем перестановки во входных последовательностях
Инструмент для слияния словарей
Глава 6. Сложные случаи использования алгоритмов STL
Реализуем класс префиксного дерева с использованием алгоритмов STL
Создаем генератор поисковых подсказок с помощью префиксных деревьев
Реализуем формулу преобразования Фурье с применением численных алгоритмов STL
Определяем ошибку суммы двух векторов
Реализуем отрисовщик множества Мандельброта в ASCII
Создаем собственный алгоритм split
Создаем полезные алгоритмы на основе стандартных алгоритмов gather
Удаляем лишние пробелы между словами
Компрессия и декомпрессия строк
Глава 7. Строки, классы потоков и регулярные выражения
Создание, конкатенация и преобразование строк
Удаляем пробелы из начала и конца строк
Преимущества использования std::string без затрат на создание объектов std::string
Считываем значения из пользовательского ввода
Подсчитываем все слова из пользовательского ввода
Форматируем ваши выходные данные с помощью манипуляторов потока ввода-вывода
Инициализируем сложные объекты из файла вывода
Заполняем контейнеры с применение итераторов std::istream
Выводим любые данные на экран с помощью итераторов std::ostream
Перенаправляем выходные данные в файл для конкретных разделов кода
Создаем пользовательские строковые классы путем наследования std::char_traits
Токенизация входных данных с помощью библиотеки для работы с регулярными выражениями
Удобный и красивый динамический вывод чисел на экран в зависимости от контекста
Перехватываем читабельные исключения для ошибок потока std::iostream
Глава 8. Вспомогательные классы
Преобразуем единицы измерения времени с помощью std::ratio
Выполняем преобразование между абсолютными и относительными значениями с использованием std::chrono
Безопасно извещаем о сбое с помощью std::optional
Применяем функции для кортежей
Быстрое создание структур данных с помощью std::tuple
Замена void* с использованием std::any для повышения безопасности типов
Хранение разных типов с применением std::variant
Автоматическое управление ресурсами с помощью std::unique_ptr
Автоматическое управление разделяемой памятью кучи с использованием std::shared_ptr
Работаем со слабыми указателями на разделяемые объекты
Упрощаем управление ресурсами устаревших API с применением умных указателей
Открываем доступ к разным переменным — членам одного объекта
Генерируем случайные числа и выбираем правильный генератор случайных чисел
Генерируем случайные числа и создаем конкретные распределения с помощью STL
Глава 9. Параллелизм и конкурентность
Автоматическое распараллеливание кода, использующего стандартные алгоритмы
Приостанавливаем программу на конкретный промежуток времени
Запускаем и приостанавливаем потоки
Выполняем устойчивую к исключениям общую блокировку с помощью std::unique_lock и std::shared_lock
Избегаем взаимных блокировок с применением std::scoped_lock
Синхронизация конкурентного использования std::cout
Безопасно откладываем инициализацию с помощью std::call_once
Отправляем выполнение задач в фоновый режим с применением std::async
Реализуем идиому «производитель/потребитель» с использованием std::condition_variable
Реализуем идиому «несколько производителей/потребителей» с помощью std::condition_variable
Распараллеливание отрисовщика множества Мандельброта в ASCII с применением std::async
Небольшая автоматическая библиотека для распараллеливания с использованием std::future
Реализуем нормализатор пути файла
Получаем канонические пути к файлам из относительных путей
Составляем список всех файлов в каталоге
Инструмент текстового поиска в стиле grep
Инструмент для автоматического переименования файлов
Создаем индикатор эксплуатации диска
Подбиваем статистику о типах файлов
Инструмент для уменьшения размера папки путем замены дубликатов символьными ссылками