Глава 1 «Новые возможности С++17» посвящена новому функционалу, привнесенному стандартом С++17 в сам язык С++. В следующих главах мы уже сконцентрируемся на функционале STL.
Глава 2 «Контейнеры STL» содержит объяснение, как были улучшены разнообразные контейнеры структур данных, предоставляемые STL. После рассмотрения всей коллекции контейнеров мы более детально изучим новые дополнения к ним.
Глава 3 «Итераторы» дает описание итераторов, которые представляют собой очень важную абстракцию и служат «клеем» между алгоритмами STL и контейнерами в моменты их совместного использования. Мы разберем всю концепцию итераторов с нуля, чтобы узнать, как лучше всего применять их в наших программах.
Глава 4 «Лямбда-выражения» посвящена лямбда-выражениям, позволяющим задействовать некоторые интересные приемы программирования. Лямбда-выражения, чьему появлению в стандарте С++11 способствовали чистые функциональные языки программирования, в С++14 и С++17 получили новые возможности.
Глава 5 «Основы работы с алгоритмами STL» знакомит со стандартными алгоритмами STL и способами их применения. Эти алгоритмы легки в использовании, имеют высокую производительность, хорошо протестированы и универсальны. Научившись работать с ними, можно концентрироваться на решениях конкретных задач, а не тратить время на изобретение велосипеда.
Глава 6 «Сложные случаи использования алгоритмов STL» показывает, как объединять простые алгоритмы STL для создания более сложных без необходимости писать один и тот же код несколько раз. В рамках этой главы мы будем строго придерживаться принципов STL.
Глава 7 «Строки, классы потоков и регулярные выражения» содержит подробный обзор классов STL, необходимых для работы со строками, обобщенными потоками ввода/вывода и регулярными выражениями. Мы детально разберем каждый из этих элементов STL.
Глава 8 «Вспомогательные классы» рассказывает, как с помощью STL генерировать случайные числа, измерять время, управлять динамической памятью, изящно сообщать об ошибках, а также о многом другом. Мы рассмотрим очень полезные и переносимые вспомогательные классы, предоставляемые STL для решения подобных задач, и разберем новые классы, появившиеся в С++17.
Глава 9 «Параллелизм и конкуренция» демонстрирует существующие расширения С++, позволяющие реализовать параллелизм и конкуренцию, — эти темы стали очень важны с тех пор, как мы вступили в эру многоядерных процессоров. В С++11 и С++17 появились возможности, значительно облегчающие реализацию программ, работающих на нескольких ядрах и выполняющих задачи одновременно. В рамках данной главы мы и рассмотрим упомянутые концепции.
Глава 10 «Файловая система» показывает: несмотря на то что в STL всегда предоставлялась поддержка чтения отдельных файлов и управления ими, в С++17 появилось много новых, не зависящих от операционной системы способов работы с файловыми путями и просмотра каталогов. В рамках главы мы научимся пользоваться этим инструментарием.
Что вам нужно для работы с книгой
Все примеры этой книги максимально просты и автономны. Их нетрудно скомпилировать и запустить, но, в зависимости от того, какими операционной системой и компилятором вы пользуетесь, эти действия могут различаться. Рассмотрим, как скомпилировать и запустить любой из примеров и на что нужно обратить особое внимание.
Компиляция и запуск примеров
Весь код из этой книги был разработан и протестирован в операционных системах Linux и MacOS с использованием компиляторов GNU C++, g++, LLVM C++, clang++.
Можно сгенерировать пример из командной оболочки с помощью g++
следующей командой:
$ g++ -std=c++1z -o recipe_app recipe_code.cpp
Аналогичная команда с использованием clang++:
$ clang++ -std=c++1z –o recipe_app recipe_code.cpp
Оба примера командной строки предполагают, что recipe_code.cpp
является текстовым файлом, содержащим ваш код С++. После компиляции программы исполняемый бинарный файл получит имя recipe_app, его можно будет запустить следующим образом:
$ ./recipe_app
Во многих примерах мы считываем все содержимое файлов через стандартный ввод. В таких случаях мы используем стандартные каналы UNIX и команду cat
, чтобы направить содержимое файла в наше приложение:
$ cat file.txt | ./recipe_app
Это работает в ОС Linux и MacOS. В оболочке Microsoft Windows команда выглядит так:
> recipe_app.exe < file.txt
Если вы запускаете программы не из оболочки, а из интегрированной среды разработки Microsoft Visual Studio, то вам нужно открыть вкладку Configuration properties►Debugging (Свойства конфигурации►Отладка) и добавить фрагмент < file.txt
в командную строку приложения, которое запускает Visual Studio.