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

Яцек Галовиц

C++17 STL Стандартная библиотека шаблонов

Оглавление

Предисловие

Темы, рассмотренные в этой книге

Что вам нужно для работы с книгой

Для кого предназначено издание

Разделы

Условные обозначения

Загрузка примеров кода

Глава 1. Новые возможности С++17

Введение

Применяем структурированные привязки (декомпозицию) для распаковки набора возвращаемых значений

Ограничиваем область видимости переменных в выражениях if и switch

Новые правила инициализатора с фигурными скобками

Разрешаем конструктору автоматически выводить полученный тип класса шаблона

Упрощаем принятие решений во время компиляции с помощью constexpr-if

Подключаем библиотеки с помощью встраиваемых переменных

Реализуем вспомогательные функции с помощью выражений свертки

Глава 2. Контейнеры STL

Введение

Используем идиому erase-remove для контейнера std::vector

Удаляем элементы из неотсортированного объекта класса std::vector за время O(1)

Получаем доступ к экземплярам класса std::vector быстрым или безопасным способом

Сохраняем сортировку экземпляров класса std::vector

Вставляем элементы в контейнер std::map эффективно и в соответствии с условиями

Исследуем новую семантику подсказок для вставки элементов с помощью метода std::map::insert

Эффективно изменяем ключи элементов std::map

Применяем контейнер std::unordered_map для пользовательских типов

Отсеиваем повторяющиеся слова из пользовательского ввода и выводим их на экран в алфавитном порядке с помощью контейнера std::set

Реализуем простой ОПН-калькулятор с использованием контейнера std::stack

Подсчитываем частоту встречаемости слов с применением контейнера std::map

Вспомогательный стилистический редактор для поиска длинных предложений в текстах с помощью std::multimap

Реализуем личный список текущих дел с помощью std::priority_queue

Глава 3. Итераторы

Введение

Создаем собственный итерабельный диапазон данных

Обеспечиваем совместимость собственных итераторов с категориями итераторов STL

Используем оболочки итераторов для заполнения обобщенных структур данных

Реализуем алгоритмы с помощью итераторов

Перебор в обратную сторону с применением обратных адаптеров для итераторов

Завершение перебора диапазонов данных с использованием ограничителей

Автоматическая проверка кода итераторов с помощью проверяемых итераторов

Создаем собственный адаптер для итераторов-упаковщиков

Глава 4. Лямбда-выражения

Введение

Динамическое определение функций с помощью лямбда-выражений

Добавляем полиморфизм путем оборачивания лямбда-выражений в std::function

Создаем функции методом конкатенации

Создаем сложные предикаты с помощью логической конъюнкции

Вызываем несколько функций с одинаковыми входными данными

Реализуем функцию transform_if с применением std::accumulate и лямбда-выражений

Генерируем декартово произведение на основе любых входных данных во время компиляции

Глава 5. Основы работы с алгоритмами STL

Введение

Копируем элементы из одних контейнеров в другие

Сортируем контейнеры

Удаляем конкретные элементы из контейнеров

Преобразуем содержимое контейнеров

Выполняем поиск элементов в упорядоченных и неупорядоченных векторах