Выбрать главу

Ограничиваем допустимые значения вектора конкретным численным диапазоном с помощью 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