Читаем C++17 STL Стандартная библиотека шаблонов онлайн бесплатно
C++17 STL Стандартная библиотека шаблонов
С++ — объектно-ориентированный язык программирования, без которого сегодня немыслима промышленная разработка ПО. В этой замечательной книге описана работа с контейнерами, алгоритмами, вспомогательными классами, лямбда-выражениями и другими интересными инструментами, которыми богат современный С++. Освоив материал, вы сможете коренным образом пересмотреть привычный подход к программированию. Преимущество издания — в подробном описании стандартной библиотеки шаблонов С++, STL. Ее свежая версия была выпущена в 2017 году. В книге вы найдете более 90 максимально реалистичных примеров, которые демонстрируют всю мощь STL. Многие из них станут базовыми кирпичиками для решения более универсальных задач. Вооружившись этой книгой, вы сможете эффективно использовать С++17 для создания высококачественного и высокопроизводительного ПО, применимого в различных отраслях.
Серия: Библиотека программиста
Компьютеры и Интернет / Программирование, программы, базы данныхТемы, рассмотренные в этой книге
Что вам нужно для работы с книгой
Для кого предназначено издание
Глава 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
Инструмент для автоматического переименования файлов
Создаем индикатор эксплуатации диска
Подбиваем статистику о типах файлов
Инструмент для уменьшения размера папки путем замены дубликатов символьными ссылками
Книга по C++, которую вы держите в руках, научит вас максимально эффективно использовать C++17. В ней представлены примеры написания кода, основанные на языке С++ и его стандартной библиотеке шаблонов (Standard Template Library, STL). Поскольку в рассматриваемых здесь примерах STL применяется по максимуму, об этой библиотеке стоит сказать подробнее.





