C++20 для программистов. Метод готовых объектов

C++20 для программистов. Метод готовых объектов

C++20 для программистов. Метод готовых объектов
Автор: Дейтел Пол, Дейтел Харви
Дата выхода: 2024
Издательство: Питер
Количество страниц: 1056
Размер файла: 4.5 MB
Тип файла: PDF
Добавил: codelibs
 Проверить на вирусы

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

 Современный C++....24

 В курсе событий....25

 Кому пригодится эта книга....25

 Готовые файлы с исходным кодом программ....25

 Три профессиональных компилятора на выбор....26

 Учебный метод готовых объектов....26

 Что такое готовые объекты?....27

 Бесплатные классы....27

 Проект Boost....27

 Примеры кода с готовыми объектами....28

 Краткое содержание книги....28

 Часть 1. Быстрый старт и базовые возможности C++....29

 Часть 2. Массивы указатели и строки....30

 Часть 3. Объектно-ориентированное программирование....31

 Часть 4. Контейнеры итераторы и алгоритмы стандартной библиотеки....33

 Часть 5. Более сложные темы....34

 Приложения....35

 Дополнительные материалы на сайте deitel.com....35

 C++ Core Guidelines....36

 Библиотека Guidelines Support Library (GSL)....36

 Профессиональные статические анализаторы кода....37

 Интернет-ресурсы для программистов....37

 Stack Overflow....37

 GitHub....38

 Docker....39

 Некоторые ключевые документы и ресурсы по C++....39

 Документация....40

 Блоги....40

 Дополнительные ресурсы....41

 Сайты где ответят на ваши вопросы....41

 Общение с авторами....41

 Благодарности....41

 Рецензенты....42

 Артур О’Двайр....43

 GitHub....43

 Мэтт Годболт и Compiler Explorer....43

 Дитмар Куль....44

 Райнер Гримм....44

 Брайан Гетц....44

 Разработчики программ с открытым исходным кодом и блогеры....44

 Поисковая система Google....45

 Grammarly....45

 Об авторах....46

 От издательства....47

 Перед началом работы....48

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

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

 Компиляторы на которых мы тестировали исходный код....49

 Не все примеры кода совместимы со всеми тремя компиляторами....49

 Установка Visual Studio Community Edition в Windows....50

 Установка Xcode в macOS....50

 Установка актуальной версии GNU C++....50

 Установка GNU Compiler Collection в Ubuntu Linux запущенной в подсистеме Windows для Linux....51

 Docker и контейнеры Docker....52

 Установка Docker....52

 Загрузка контейнера Docker содержащего GNU Compiler Collection....52

 Загрузка контейнера Docker содержащего Clang....53

 Ответы на ваши вопросы по C++....53

 Онлайн-документация по C++....54

 О библиотеке форматирования текста {fmt}....54

 Средства статического анализа кода....54

 Глава 1. Введение и тест-драйв популярных бесплатных компиляторов C++....56

 1.1. Введение....57

 1.2. Тест-драйв: компиляция приложения написанного на C++20....58

 1.2.1. Компиляция и запуск приложения в Windows с помощью Visual Studio 2022....59

 1.2.2. Компиляция и запуск приложения в macOS с помощью Xcode....63

 1.2.3. Компиляция и запуск приложения в Linux с помощью g++....67

 1.2.4. Компиляция и запуск приложения в контейнере Docker с помощью g++....70

 1.2.5. Компиляция и запуск приложения в контейнере Docker с помощью clang++....71

 1.3. Закон Мура многоядерные процессоры и многопоточное программирование....73

 1.4. Что такое объектно-ориентированное программирование?....75

 1.5. Итоги....78

 Глава 2. Азы программирования на C++....79

 2.1. Введение....80

 2.2. Первая программа на C++: вывод текста на экран....80

 2.3. Модификация нашей первой программы на C++....85

 2.4. Вторая программа на C++: сложение целых чисел....86

 2.5. Арифметические операторы....90

 2.6. Принятие решений: операторы равенства и сравнения....92

 2.7. Готовые объекты: создание и использование объектов класса string стандартной библиотеки....96

 2.8. Итоги....100

 Глава 3. Управляющие инструкции (часть 1)....101

 3.1. Введение....102

 3.2. Управляющие структуры....102

 3.2.1. Последовательность....103

 3.2.2. Инструкции выбора....104

 3.2.3. Инструкции цикла....104

 3.2.4. Комбинации управляющих инструкций....105

 3.3. Инструкция одиночного выбора if....106

 3.4. Инструкция двойного выбора if...else....107

 3.4.1. Вложенные инструкции if...else....108

 3.4.2. Блоки....109

 3.4.3. Тернарный условный оператор ?:....110

 3.5. Инструкция цикла while....110

 3.6. Цикл со счетчиком....111

 3.6.1. Реализация цикла со счетчиком....112

 3.6.2. Целочисленное деление с усечением....113

 3.7. Цикл с контрольным значением....114

 3.7.1. Реализация цикла с контрольным значением....114

 3.7.2. Явное и неявное преобразование основных типов данных....117

 3.7.3. Форматирование чисел с плавающей точкой....118

 3.8. Вложенные управляющие инструкции....119

 3.8.1. Постановка задачи....119

 3.8.2. Реализация программы....120

 3.8.3. Предотвращение сужающих преобразований с помощью скобочной инициализации....122

 3.9. Составные операторы присваивания....123

 3.10. Операторы инкремента и декремента....123

 3.11. Несовместимость основных типов данных на разных платформах....127

 3.12. Готовые объекты: работа с целыми числами произвольной величины....127

 3.13. Форматирование текста функцией format....133

 3.14. Итоги....135

 Глава 4. Управляющие инструкции (часть 2)....137

 4.1. Введение....138

 4.2. Как работает цикл со счетчиком....138

 4.3. Инструкция цикла for....139

 4.4. Инкремент и декремент счетчика в цикле for....142

 4.5. Программа для вычисления суммы четных чисел....143

 4.6. Программа для расчета сложных процентов....144

 4.7. Инструкция цикла do...while....148

 4.8. Инструкция множественного выбора switch....150

 4.9. Инструкции выбора с инициализаторами....156

 4.10. Инструкции break и continue....157

 4.11. Логические операторы....159

 4.11.1. Оператор && (логическое И)....159

 4.11.2. Оператор || (логическое ИЛИ)....160

 4.11.3. Вычисление по короткой схеме....161

 4.11.4. Оператор ! (логическое НЕ)....162

 4.11.5. Программное создание таблиц истинности для логических операторов....162

 4.12. Типичные ошибки при работе с операторами равенства (==) и присваивания (=)....164

 4.13. Готовые объекты: создание и чтение ZIP-файлов....166

 4.14. Форматирование текста с указанием ширины полей и точности....171

 4.15. Итоги....174

 Глава 5. Функции и шаблоны функций....175

 5.1. Введение....176

 5.2. Функции и классы — основные компоненты программ....176

 5.3. Функции математической библиотеки....177

 5.4. Определения функций и прототипы функций....180

 5.5. Порядок вычисления аргументов функции....183

 5.6. Дополнительные сведения о прототипах функций и принудительном приведении аргументов....184

 5.6.1. Сигнатуры функций и прототипы функций....184

 5.6.2. Принудительное приведение аргументов....184

 5.6.3. Правила продвижения аргументов и неявные преобразования....185

 5.7. Заголовки стандартной библиотеки C++....187

 5.8. Генерация случайных чисел....190

 5.8.1. Бросаем игровой кубик....191

 5.8.2. Бросаем кубик 60 миллионов раз....192

 5.8.3. Инициализация генератора случайных чисел....194

 5.8.4. Инициализация генератора случайных чисел с помощью random_device....195

 5.9. Программа «Игра в кости» и знакомство с перечислениями....196

 5.10. Правила областей видимости....202

 5.11. Встроенные функции....207

 5.12. Ссылки и ссылочные параметры....208

 5.13. Аргументы по умолчанию....212

 5.14. Оператор разрешения области видимости....214

 5.15. Перегрузка функций....214

 5.16. Шаблоны функций....218

 5.17. Рекурсия....221

 5.18. Пример рекурсивных вычислений: числа Фибоначчи....224

 5.19. Рекурсия или итерация?....228

 5.20. Lnfylun Lhqtomh Wjtz Qarcv: Qjwazkrplm xzz Xndmwwqhlz....230

 5.21. Итоги....234

 Глава 6. Массивы векторы библиотека ranges и функциональное программирование....235

 6.1. Введение....236

 6.2. Массивы....237

 6.3. Объявление массива....237

 6.4. Инициализация массива в цикле....238

 6.5. Инициализация массива со списком инициализаторов....241

 6.6. Цикл for для диапазона значений (C++11) и цикл for для диапазона значений с инициализатором (C++20)....242

 6.7. Заполнение массива и спецификатор constexpr....245

 6.8. Суммирование элементов массива....247

 6.9. Визуализация данных массива на простой диаграмме....248

 6.10. Использование элементов массива в качестве счетчиков....250

 6.11. Использование массива для подсчета результатов опроса....251

 6.12. Сортировка массива и поиск в массиве....252

 6.13. Многомерные массивы....255

 6.14. Основы функционального программирования....259

 6.14.1. «Что» и «как»....260

 6.14.2. Передача функций в качестве аргументов другим функциям основы лямбда-выражений....261

 6.14.3. Фильтрация преобразование и свертка с библиотекой ranges (C++20)....263

 6.15. Готовые объекты: шаблон класса vector стандартной библиотеки C++....268

 6.16. Итоги....275

 Глава 7. Указатели в современном C++ (фактор риска)....277

 7.1. Введение....278

 7.2. Объявление и инициализация указателей....280

 7.2.1. Объявление указателя....280

 7.2.2. Инициализация указателя....280

 7.2.3. Нулевые указатели до C++11....281

 7.3. Операторы для работы с указателями....281

 7.3.1. Оператор взятия адреса (&)....281

 7.3.2. Оператор косвенного обращения (*)....282

 7.3.3. Использование операторов взятия адреса (&) и косвенного обращения (*)....283

 7.4. Передача аргументов по указателю....284

 7.5. Традиционные массивы в стиле C....286

 7.5.1. Объявление традиционного массива и доступ к его элементам....286

 7.5.2. Инициализация традиционного массива....289

 7.5.3. Передача традиционного массива функции....289

 7.5.4. Объявление параметров функции обрабатывающей традиционный массив....289

 7.5.5. Пример с функциями sort begin и end стандартной библиотеки (C++11)....290

 7.5.6. Недостатки традиционных массивов....290

 7.6. Функция to_array (C++20) преобразующая традиционные массивы в std::array....291

 7.7. Использование const с указателями и данными на которые они указывают....293

 7.7.1. Неконстантный указатель на неконстантные данные....293

 7.7.2. Неконстантный указатель на константные данные....293

 7.7.3. Константный указатель на неконстантные данные....294

 7.7.4. Константный указатель на константные данные....295

 7.8. Оператор sizeof....296

 7.9. Выражения и арифметические операции с указателями....299

 7.9.1. Прибавление и вычитание целых чисел....300

 7.9.2. Вычитание одного указателя из другого....301

 7.9.3. Присваивание указателя....301

 7.9.4. Невозможность разыменования указателя void*....302

 7.9.5. Сравнение указателей....302

 7.10. Готовые объекты: доступ к контейнерам через span (C++20)....302

 7.11. Строки на основе указателей....309

 7.11.1. Аргументы командной строки....310

 7.11.2. Еще одна возможность функции to_array (C++20)....312

 7.12. Другие темы связанные с указателями....313

 7.13. Итоги....314

 Глава 8. Строки и их представления текстовые файлы CSV-файлы и регулярные выражения....315

 8.1. Введение....316

 8.2. Присваивание и конкатенация строк....317

 8.3. Сравнение строк....319

 8.4. Создание подстроки....321

 8.5. Обмен значениями двух строк....321

 8.6. Получение характеристик строки....322

 8.7. Поиск подстрок и символов в строке....325

 8.8. Замена и удаление символов в строке....327

 8.9. Вставка символов в строку....329

 8.10. Преобразования между числами и строками (C++11)....330

 8.11. Представления string_view (C++17)....332

 8.12. Файлы и потоки....335

 8.13. Создание файла с последовательным доступом....336

 8.14. Чтение данных из файла с последовательным доступом....340

 8.15. Чтение и запись текста в кавычках (C++14)....342

 8.16. Обновление данных в файле с последовательным доступом....344

 8.17. Обработка строковых потоков....344

 8.18. Необработанные строковые литералы....347

 8.19. Готовые объекты: чтение и анализ CSV-файла с данными о катастрофе «Титаника»....348

 8.19.1. Чтение CSV-файла с помощью библиотеки rapidcsv....349

 8.19.2. Работа с набором данных «Титаник»....351

 8.20. Готовые объекты: основы регулярных выражений....359

 8.20.1. Сравнение целых строк с шаблонами....361

 8.20.2. Замена подстрок....365

 8.20.3. Поиск в тексте по шаблонам....366

 8.21. Итоги....369

 Глава 9. Пользовательские классы....370

 9.1. Введение....371

 9.2. Тест-драйв объекта пользовательского класса Account....371

 9.3. Класс Account с элементом данных set-функцией и get-функцией....373

 9.3.1. Определение класса....373

 9.3.2. Спецификаторы доступа private и public....376

 9.4. Конструктор класса Account....377

 9.5. Разработка программ с set-функциями и get-функциями....381

 9.6. Добавление «денежной» переменной в класс Account....383

 9.7. Отделение интерфейса от реализации на примере класса Time....386

 9.7.1. Интерфейс класса....388

 9.7.2. Отделение интерфейса класса от реализации класса....388

 9.7.3. Определение класса....389

 9.7.4. Функции класса Time....390

 9.7.5. Включение заголовка класса в файл исходного кода....391

 9.7.6. Оператор разрешения области видимости (::)....391

 9.7.7. Функция setTime и исключения....392

 9.7.8. Функции to24HourString и to12HourString....392

 9.7.9. Неявное встраивание функций....393

 9.7.10. Функции класса в сравнении с глобальными функциями....393

 9.7.11. Использование класса Time....393

 9.7.12. Размер объекта....395

 9.8. Процесс компиляции и компоновки программы....395

 9.9. Область видимости класса и доступ к элементам класса....397

 9.10. Функции доступа и служебные функции....398

 9.11. Конструкторы с аргументами по умолчанию....398

 9.11.1. Усовершенствованный класс Time....398

 9.11.2. Перегрузка конструкторов и делегирование конструкторов (C++11)....404

 9.12. Деструкторы....405

 9.13. Вызов конструкторов и деструкторов....405

 9.14. Коварная ловушка: возврат ссылки или указателя на скрытый элемент данных....409

 9.15. Оператор присваивания по умолчанию....412

 9.16. Константные объекты и константные функции класса....414

 9.17. Композиция: объекты как элементы классов....416

 9.18. Дружественные функции и классы....421

 9.19. Указатель this....423

 9.19.1. Неявное и явное использование указателя this для доступа к элементам данных объекта....424

 9.19.2. Использование указателя this для каскадного вызова функций....425

 9.20. Статические элементы класса: данные и функции общие для всех объектов класса....429

 9.21. Агрегаты....434

 9.21.1. Инициализация агрегата....435

 9.21.2. Назначенные инициализаторы (C++20)....435

 9.22. Готовые объекты: сериализация в формате JSON....436

 9.22.1. Сериализация вектора объектов содержащего открытые данные....438

 9.22.2. Сериализация вектора объектов содержащего скрытые данные....442

 9.23. Итоги....444

 Глава 10. ООП: наследование и динамический полиморфизм....446

 10.1. Введение....447

 10.2. Базовые и производные классы....450

 10.2.1. Иерархия класса CommunityMember....450

 10.2.2. Иерархия класса Shape и открытое наследование....451

 10.3. Взаимосвязь между базовым и производным классами....453

 10.3.1. Объявление и использование класса SalariedEmployee....453

 10.3.2. Создание иерархии наследования: SalariedEmployee и SalariedCommissionEmployee....456

 10.4. Конструкторы и деструкторы в производных классах....462

 10.5. Принцип динамического полиморфизма на примере объектов в видеоигре....463

 10.6. Отношения между объектами в иерархии наследования....464

 10.6.1. Вызов функций базового класса из объектов производного класса....465

 10.6.2. Направление указателя производного класса на объект базового класса....468

 10.6.3. Вызовы функций производного класса через указатель базового класса....469

 10.7. Виртуальные функции и виртуальные деструкторы....470

 10.7.1. Зачем нужны виртуальные функции....470

 10.7.2. Объявление виртуальной функции....471

 10.7.3. Вызов виртуальной функции....471

 10.7.4. Виртуальные функции в иерархии SalariedEmployee....472

 10.7.5. Виртуальные деструкторы....476

 10.7.6. Финальные функции и классы....476

 10.8. Абстрактные классы и чистые виртуальные функции....477

 10.8.1. Чистые виртуальные функции....477

 10.8.2. Драйверы устройств: полиморфизм в операционных системах....478

 10.9. Полиморфизм в программе расчета зарплаты....479

 10.9.1. Создание абстрактного базового класса Employee....480

 10.9.2. Создание конкретного производного класса SalariedEmployee....482

 10.9.3. Создание конкретного производного класса CommissionEmployee....485

 10.9.4. Демонстрация полиморфных операций с объектами....487

 10.10. Динамический полиморфизм виртуальные функции и динамическое связывание «под капотом» компилятора....490

 10.11. Идиома невиртуального интерфейса....493

 10.12. Наследование интерфейса вместо наследования реализации....501

 10.12.1. Переосмысление иерархии класса Employee: интерфейс CompensationModel....503

 10.12.2. Класс Employee....503

 10.12.3. Реализации CompensationModel....505

 10.12.4. Тест-драйв новой иерархии....508

 10.12.5. Преимущества внедрения зависимостей....509

 10.13. Полиморфизм на основе шаблона класса std::variant и функции std::visit....509

 10.14. Множественное наследование....516

 10.14.1. Ромбовидное наследование....521

 10.14.2. Устранение конфликта подобъектов с помощью виртуального наследования базового класса....523

 10.15. Защищенные элементы класса....525

 10.16. Открытое защищенное и скрытое наследование....527

 10.17. Другие методы динамического полиморфизма и статический полиморфизм....528

 10.17.1. Другие методы динамического полиморфизма....529

 10.17.2. Методы статического полиморфизма....530

 10.17.3. Другие концепции полиморфизма....532

 10.18. Итоги....533

 Глава 11. Перегрузка операторов семантика копирования и перемещения умные указатели....535

 11.1. Введение....536

 11.2. Перегруженные операторы класса string стандартной библиотеки....538

 11.3. Основные принципы перегрузки операторов....543

 11.3.1. Перегрузка операторов не происходит автоматически....543

 11.3.2. Операторы которые не могут быть перегружены....544

 11.3.3. Операторы которые не нужно перегружать....544

 11.3.4. Правила и ограничения перегрузки операторов....544

 11.4. Управление динамической памятью с помощью операторов new и delete....545

 11.5. Современные методы управления динамической памятью в C++: RAII и умные указатели....548

 11.5.1. Умные указатели....549

 11.5.2. Умный указатель unique_ptr....549

 11.5.3. Владение объектами при работе с unique_ptr....551

 11.5.4. Указатели unique_ptr и традиционные массивы....551

 11.6. Создание класса myArray с перегрузкой операторов....552

 11.6.1. Специальные функции класса....554

 11.6.2. Работа с классом myArray....554

 11.6.3. Определение класса myArray....565

 11.6.4. Конструктор задающий размер объекта myArray....566

 11.6.5. Скобочная инициализация в конструкторе (C++11)....567

 11.6.6. Копирующий конструктор и оператор копирующего присваивания....568

 11.6.7. Перемещающий конструктор и оператор перемещающего присваивания....572

 11.6.8. Деструктор....576

 11.6.9. Функции toString и size....577

 11.6.10. Перегрузка операторов равенства и неравенства....577

 11.6.11. Перегрузка оператора индекса....579

 11.6.12. Перегрузка унарного конвертирующего оператора bool....581

 11.6.13. Перегрузка оператора префиксного инкремента....581

 11.6.14. Перегрузка оператора постфиксного инкремента....582

 11.6.15. Перегрузка оператора сложения с присваиванием....583

 11.6.16. Перегрузка бинарных операторов извлечения из потока и вставки в поток....584

 11.6.17. Дружественная функция swap....587

 11.7. Оператор трехстороннего сравнения (C++20)....587

 11.8. Преобразования между типами....591

 11.9. Конструкторы и конвертирующие операторы со спецификатором explicit....592

 11.10. Перегрузка оператора вызова функции....595

 11.11. Итоги....595

 Глава 12. Исключения и обзор контрактного программирования....597

 12.1. Введение....598

 12.2. Поток управления при обработке исключения....602

 12.2.1. Определение класса исключений для представления типа проблемы которая может возникнуть....602

 12.2.2. Демонстрация обработки исключений....603

 12.2.3. Включение кода в блок try....605

 12.2.4. Определение обработчика catch для DivideByZeroException....605

 12.2.5. Модель завершения обработки исключений....606

 12.2.6. Поток управления при вводе ненулевого знаменателя....607

 12.2.7. Поток управления при вводе нулевого знаменателя....607

 12.3. Гарантии безопасности исключений и noexcept....608

 12.4. Повторная генерация исключений....609

 12.5. Размотка стека и необработанные исключения....611

 12.6. Когда надо обрабатывать исключения....613

 12.6.1. Макрос assert....616

 12.6.2. Немедленное завершение....616

 12.7. Конструкторы деструкторы и обработка исключений....617

 12.7.1. Генерация исключений в конструкторах....617

 12.7.2. Перехват исключений в конструкторах с помощью функциональных блоков try....618

 12.7.3. Исключения деструкторы и noexcept(false)....620

 12.8. Обработка исключений оператора new....621

 12.8.1. Генерация исключения bad_alloc оператора new....622

 12.8.2. Оператор new возвращающий nullptr при сбое....623

 12.8.3. Обработка исключений оператора new с помощью функции set_new_handler....624

 12.9. Иерархия исключений стандартной библиотеки....625

 12.10. Альтернатива блоку finally в языке C++: RAII («получение ресурсов есть инициализация»)....628

 12.11. Библиотеки поддерживающие и исключения и коды ошибок....629

 12.12. Журнал ошибок....630

 12.13. Основы контрактного программирования....631

 12.14. Итоги....640

 Глава 13. Контейнеры и итераторы стандартной библиотеки....642

 13.1. Введение....643

 13.2. Основы контейнеров....645

 13.2.1. Общие вложенные типы в последовательных и ассоциативных контейнерах....647

 13.2.2. Общие функции контейнеров....648

 13.2.3. Требования к элементам контейнера....651

 13.3. Работа с итераторами....652

 13.3.1. Использование istream_iterator для ввода и ostream_iterator для вывода....652

 13.3.2. Категории итераторов....654

 13.3.3. Поддерживаемые контейнеры....655

 13.3.4. Предопределенные типы итераторов....656

 13.3.5. Операторы для работы с итераторами....656

 13.4. Несколько слов об алгоритмах для обработки контейнеров....658

 13.5. Последовательные контейнеры....658

 13.6. Последовательный контейнер vector....659

 13.6.1. Использование векторов и итераторов....659

 13.6.2. Функции для обработки элементов вектора....664

 13.7. Последовательный контейнер list....668

 13.8. Последовательный контейнер deque....673

 13.9. Ассоциативные контейнеры....675

 13.9.1. Ассоциативный контейнер multiset....676

 13.9.2. Ассоциативный контейнер set....680

 13.9.3. Ассоциативный контейнер multimap....682

 13.9.4. Ассоциативный контейнер map....685

 13.10. Адаптеры контейнеров....686

 13.10.1. Адаптер stack....687

 13.10.2. Адаптер queue....689

 13.10.3. Адаптер priority_queue....690

 13.11. Псевдоконтейнер bitset....692

 13.12. Основы нотации «O-большое»....694

 13.13. Основы хеш-таблиц....697

 13.14. Итоги....700

 Глава 14. Алгоритмы стандартной библиотеки диапазоны и представления C++20....701

 14.1. Введение....702

 14.2. Требования алгоритмов: концепты (C++20)....704

 14.3. Лямбда-выражения и алгоритмы....706

 14.4. Алгоритмы....710

 14.4.1. Алгоритмы fill fill_n generate и generate_n....710

 14.4.2. Алгоритмы equal mismatch и lexicographical_compare....713

 14.4.3. Алгоритмы remove remove_if remove_copy и remove_copy_if....716

 14.4.4. Алгоритмы replace replace_if replace_copy и replace_copy_if....721

 14.4.5. Алгоритмы перемешивания подсчетов поиска минимального и максимального элементов....723

 14.4.6. Алгоритмы поиска и сортировки....727

 14.4.7. Алгоритмы swap iter_swap и swap_ranges....731

 14.4.8. Алгоритмы copy_backward merge unique reverse copy_if и copy_n....734

 14.4.9. Алгоритмы inplace_merge unique_copy и reverse_copy....737

 14.4.10. Операции со множествами....739

 14.4.11. Алгоритмы lower_bound upper_bound и equal_range....742

 14.4.12. Алгоритмы min max и minmax....744

 14.4.13. Алгоритмы gcd lcm iota reduce и partial_sum (заголовок )....745

 14.4.14. Пирамидальная сортировка кучи и приоритетные очереди....749

 14.5. Функциональные объекты (функторы)....754

 14.6. Проекции....759

 14.7. Представления (C++20) и функциональное программирование....763

 14.7.1. Адаптеры диапазонов....763

 14.7.2. Работа с адаптерами диапазонов и представлениями....765

 14.8. Основы параллельных алгоритмов....770

 14.9. Краткое описание алгоритмов стандартной библиотеки....772

 14.10. Диапазоны в C++23....776

 14.11. Итоги....777

 Глава 15. Шаблоны концепты (C++20) и метапрограммирование....779

 15.1. Введение....780

 15.2. Пользовательские шаблоны классов и статический полиморфизм....783

 15.3. Расширения функциональности шаблонов введенные в C++20....789

 15.3.1. Сокращенные шаблоны функций (C++20)....789

 15.3.2. Шаблоны лямбда-выражений (C++20)....791

 15.4. Концепты (C++20): первый взгляд....791

 15.4.1. Неограниченный шаблон функции multiply....793

 15.4.2. Ограниченный шаблон функции с условием requires (C++20)....796

 15.4.3. Концепты предопределенные в C++20....799

 15.5. Признаки типов....801

 15.6. Концепты: детальное рассмотрение....806

 15.6.1. Создание пользовательского концепта....807

 15.6.2. Использование концепта....808

 15.6.3. Концепты в сокращенных шаблонах функций....809

 15.6.4. Перегрузка на основе концептов....810

 15.6.5. Выражения requires....813

 15.6.6. Демонстрационные концепты....817

 15.6.7. Технологии применявшиеся до появления концептов: SFINAE и отправка тегов....818

 15.7. Тест-драйв концептов с помощью объявления static_assert....819

 15.8. Создание пользовательского алгоритма....822

 15.9. Создание пользовательского контейнера и пользовательских итераторов....824

 15.9.1. Шаблон класса ConstIterator....827

 15.9.2. Шаблон класса Iterator....830

 15.9.3. Шаблон класса MyArray....832

 15.9.4. Дедуктивная инструкция для скобочной инициализации объекта myArray....836

 15.9.5. Тест-драйв класса myArray и его пользовательских итераторов с алгоритмами std::ranges....838

 15.10. Аргументы по умолчанию для параметров-типов шаблона....842

 15.11. Шаблоны переменных....842

 15.12. Вариативные шаблоны и выражения свертки....843

 15.12.1. Кортежи: вариативный шаблон класса tuple....843

 15.12.2. Вариативные шаблоны функций и основы выражений свертки (C++17)....847

 15.12.3. Типы выражений свертки....851

 15.12.4. Применение операторов в унарных выражениях свертки....852

 15.12.5. Применение операторов в бинарных выражениях свертки....854

 15.12.6. Оператор «запятая» для повторения операций....856

 15.12.7. Ограничение элементов пакета параметров одним типом....857

 15.13. Метапрограммирование на основе шаблонов....859

 15.13.1. Шаблоны C++ обладают полнотой по Тьюрингу....860

 15.13.2. Вычисления на этапе компиляции....861

 15.13.3. Условная компиляция в метапрограммировании на основе шаблонов и инструкции constexpr if....866

 15.13.4. Метафункции типа....869

 15.14. Итоги....873

 Глава 16. Модули (C++20): технология разработки больших программ....875

 16.1. Введение....876

 16.2. Компиляция и компоновка до C++20....878

 16.3. Преимущества и предназначение модулей....880

 16.4. Пример перехода на модули: заголовочные единицы трансляции....881

 16.5. Модули могут уменьшать размеры единиц трансляции и время компиляции....884

 16.6. Пример: создание и использование модуля....886

 16.6.1. Объявление модульной единицы....887

 16.6.2. Экспорт объявления....889

 16.6.3. Экспорт группы объявлений....890

 16.6.4. Экспорт пространства имен....890

 16.6.5. Экспорт элемента пространства имен....891

 16.6.6. Импорт модуля для его использования в экспорте объявлений....891

 16.6.7. Пример: попытка доступа к неэкспортированному элементу модуля....893

 16.7. Глобальный фрагмент модуля....896

 16.8. Отделение интерфейса от реализации....896

 16.8.1. Пример: единицы реализации модуля....897

 16.8.2. Пример: класс на основе модулей....900

 16.8.3. Фрагмент :private....903

 16.9. Разделы модуля....904

 16.9.1. Пример: разделы интерфейса модуля....904

 16.9.2. Разделы реализации модуля....908

 16.9.3. Пример: «подмодули» и разделы....908

 16.10. Дополнительные примеры работы с модулями....913

 16.10.1. Пример: импорт стандартной библиотеки C++ в виде модулей....914

 16.10.2. Пример: запрет циклических зависимостей....916

 16.10.3. Пример: инструкции import не наследуются....917

 16.10.4. Пример: видимость и доступность модулей....918

 16.11. Перенос кода в модули....920

 16.12. Будущее модулей и инструментов для работы с ними....921

 16.13. Итоги....922

 Приложение: видео про модули....924

 Приложение: статьи про модули....925

 Приложение: глоссарий по модулям....928

 Глава 17. Параллельные алгоритмы и конкурентность: высокоуровневый подход....931

 17.1. Введение....932

 17.2. Параллельные алгоритмы стандартной библиотеки (C++17)....935

 17.2.1. Пример: сравнение быстродействия последовательного и параллельного алгоритмов сортировки....936

 17.2.2. Когда нужны параллельные алгоритмы....940

 17.2.3. Политики выполнения....941

 17.2.4. Пример: сравнение быстродействия параллельных и векторных операций....941

 17.2.5. Дополнительные сведения о параллельных алгоритмах....944

 17.3. Многопоточное программирование....945

 17.3.1. Состояния потока и жизненный цикл потока....945

 17.3.2. Тупики и неопределенно долгие отсрочки....948

 17.4. Запуск задач с помощью std::jthread....951

 17.4.1. Определение задачи для выполнения в потоке....951

 17.4.2. Выполнение задачи в потоке jthread....953

 17.4.3. Преимущества класса jthread перед классом thread....956

 17.5. Отношения между производителем и потребителем: первый эксперимент....957

 17.6. Синхронизация доступа производителя и потребителя к общим изменяемым данным....965

 17.6.1. Класс SynchronizedBuffer: мьютексы блокировки и условные переменные....967

 17.6.2. Тестирование класса SynchronizedBuffer....975

 17.7. Производитель и потребитель: минимизация ожидания с помощью кольцевого буфера....979

 17.8. Читатели и писатели....989

 17.9. Кооперативное прерывание потоков класса jthread....991

 17.10. Запуск задач с помощью шаблона функции std::async....994

 17.11. Однократная потокобезопасная инициализация....1002

 17.12. Основы атомарных типов....1004

 17.13. Координация потоков с помощью защелок и барьеров (C++20)....1008

 17.13.1. Защелки класса std::latch (C++20)....1009

 17.13.2. Барьеры класса std::barrier (C++20)....1012

 17.14. Семафоры (C++20)....1016

 17.15. C++23: взгляд в будущее конкурентности....1020

 17.15.1. Параллельные алгоритмы std::ranges....1020

 17.15.2. Конкурентные контейнеры....1020

 17.15.3. Другие материалы связанные с конкурентностью....1021

 17.16. Итоги....1021

 Глава 18. Корутины (C++20)....1024

 18.1. Введение....1025

 18.2. Библиотеки поддержки корутин....1026

 18.3. Установка библиотек concurrencpp и generator....1028

 18.4. Создание корутины-генератора с помощью библиотеки generator....1029

 18.5. Запуск задач с помощью библиотеки concurrencpp....1033

 18.6. Создание корутины содержащей co_await и co_return....1039

 18.7. Низкоуровневые концепции корутин....1048

 18.8. Развитие корутин в C++23....1051

 18.9. Итоги....1051

 Приложение А. Приоритеты и группировка операторов....1052

 Приложение Б. Набор символов....1055

Программисты с опытом работы на других языках высокого уровня смогут на практике освоить современный С++ и «большую четверку» его новых возможностей: диапазоны, концепты, модули и корутины.

200+ практических примеров реального исходного кода позволят быстро овладеть идиомами современного С++, используя популярные компиляторы: Visual C++®, GNU® g++, Apple® Xcode® и LLVM®/Clang. Знание базы позволит перейти к контейнерам стандартной библиотеки С++ array и vector; функциональному программированию с диапазонами и представлениями C++20; строкам, файлам и регулярным выражениям; объектно-ориентированному программированию с классами, наследованием, динамическим и статическим полиморфизмом; перегрузке операторов, семантике копирования и перемещения, RAII и умным указателям; исключениям и ожидаемым в С++23 контрактам; контейнерам, итераторам и алгоритмам стандартной библиотеки; шаблонам, концептам С++20 и метапрограммированию; модулям С++ 20 и технологии разработки больших программ; конкурентности, параллелизму, параллельным алгоритмам стандартной библиотеки С++17 и С++20 и корутинам С++20.


Похожее:

Список отзывов:

Нет отзывов к книге.