- Фантастика и фэнтези
- Ироническое фэнтези
- Стимпанк
- Детективная фантастика
- Киберпанк
- Попаданцы
- LitRPG
- Космоопера
- Технофэнтези
- Городская фантастика
- Русское фэнтези
- Юмористическая фантастика
- Космическая фантастика
- Боевое фэнтези
- Эпическая фантастика
- Зарубежная фантастика
- Книги магов
- Мистика
- Разная фантастика
- Разное фэнтези
- Любовное фэнтези
- Романтическая фантастика
- Городское фентези
- Историческая фантастика
- Историческое фэнтези
- Социально-философская фантастика
- Сказочная фантастика
- Иностранное фэнтези
- Романтическое фэнтези
- Ироническая фантастика
- Ужасы и Мистика
- Постапокалипсис
- Героическая фантастика
- Фэнтези
- Научная Фантастика
- Социально-психологическая
- Альтернативная история
- Боевая фантастика
- Разная литература
- Пословицы, поговорки
- Шахматы
- Визуальные искусства
- Фанфик
- Авто и ПДД
- Военное
- Отраслевые издания
- Гиды, путеводители
- Зарубежная образовательная литература
- Военная история
- Цитаты из афоризмов
- Современная литература
- Великолепные истории
- Начинающие авторы
- Современная зарубежная литература
- Боевые искусства
- Изобразительное искусство, фотография
- Кино
- Литература 19 века
- Недвижимость
- Музыка, музыканты
- Готические новеллы
- Истории из жизни
- Культура и искусство
- Спецслужбы
- Зарубежная прикладная литература
- Музыка, танцы
- Подростковая литература
- Прочее
- Военная техника, оружие
- Газеты и журналы
- Периодические издания
- Домоводство, Дом и семья
- Любовные романы
- Экономическая литература
- Научные и научно-популярные книги
- О животных
- Биохимия
- Культурология
- Юриспруденция
- Политика
- Психотерапия
- Языкознание
- Научпоп
- Медицина
- Психология, личное
- Радиотехника
- Филология
- Педагогика
- Образовательная литература
- Деловая литература
- Физика
- Науки: разное
- Химия
- Воспитание детей, педагогика
- Детская психология
- Зарубежная публицистика
- Биология
- Архитектура
- Зарубежная психология
- Науки о космосе
- Социология
- Математика
- География
- Беременность, ожидание детей
- Литературоведение
- Транспорт, военная техника
- Обществознание
- Зоология
- География
- Альтернативная медицина
- Иностранные языки
- Ветеринария
- Рефераты
- Астрология
- Биофизика
- Экология
- История Европы
- Учебники
- Шпаргалки
- Государство и право
- Ботаника
- Религиоведение
- История
- Техническая литература
- Прочая научная литература
- Психология
- Детективы и Триллеры
- Справочная литература
- Проза
- Новелла
- Юмор
- Проза
- Историческая проза
- Русская современная проза
- Советская классическая проза
- Повести
- Очерки
- Эссе
- Рассказы
- Зарубежная современная проза
- Сентиментальная проза
- Зарубежная классика
- Афоризмы
- Эпистолярная проза
- Феерия
- Семейный роман/Семейная сага
- Разное
- Антисоветская литература
- Магический реализм
- Русская классическая проза
- Современная проза
- О войне
- Контркультура
- Классическая проза
- Поэзия, Драматургия
- Детская литература
- Детская фантастика
- Детские остросюжетные
- Детские стихи
- Детские приключения
- Внеклассное чтение
- Учебная литература
- Зарубежные детские книги
- Бизнес
- Загадки
- Книги для подростков
- Школьные учебники
- Детский фольклор
- Книги для дошкольников
- Детские детективы
- Детская познавательная и развивающая литература
- Буквари
- Прочая детская литература
- Сказка
- Детская проза
- Детская образовательная литература
- Юмор
- Документальные книги
- Бизнес
- Внешнеэкономическая деятельность
- Тайм-менеджмент
- Кадровый менеджмент
- О бизнесе популярно
- Управление, подбор персонала
- Бизнес
- Менеджмент и кадры
- Продажи
- Экономика
- Ценные бумаги и инвестиции
- Малый бизнес
- Делопроизводство, офис
- Корпоративная культура, бизнес
- Банковское дело
- Финансы
- Зарубежная деловая литература
- Ораторское искусство / риторика
- Личные финансы
- Интернет-бизнес
- Поиск работы
- Государственное и муниципальное управление
- Бухучет и аудит
- Работа с клиентами
- Менеджмент
- Краткое содержание
- Личная эффективность
- Переговоры
- Приключения
- Старинная литература
- Религия и духовность
- Компьютеры и Интернет
- Блог
Читаем без скачивания C++17 STL Стандартная библиотека шаблонов - Яцек Галовиц
Шрифт:
Интервал:
Закладка:
Синхронизация конкурентного использования std::cout
Безопасно откладываем инициализацию с помощью std::call_once
Отправляем выполнение задач в фоновый режим с применением std::async
Реализуем идиому «производитель/потребитель» с использованием std::condition_variable
Реализуем идиому «несколько производителей/потребителей» с помощью std::condition_variable
Распараллеливание отрисовщика множества Мандельброта в ASCII с применением std::async
Небольшая автоматическая библиотека для распараллеливания с использованием std::future
Глава 10. Файловая система
Введение
Реализуем нормализатор пути файла
Получаем канонические пути к файлам из относительных путей
Составляем список всех файлов в каталоге
Инструмент текстового поиска в стиле grep
Инструмент для автоматического переименования файлов
Создаем индикатор эксплуатации диска
Подбиваем статистику о типах файлов
Инструмент для уменьшения размера папки путем замены дубликатов символьными ссылками
Об авторе
О рецензенте
Предисловие
Книга по C++, которую вы держите в руках, научит вас максимально эффективно использовать C++17. В ней представлены примеры написания кода, основанные на языке С++ и его стандартной библиотеке шаблонов (Standard Template Library, STL). Поскольку в рассматриваемых здесь примерах STL применяется по максимуму, об этой библиотеке стоит сказать подробнее.
С++ — мощный язык. Он позволяет скрывать сложные решения за простыми высокоуровневыми интерфейсами, но в то же время дает возможность писать низкоуровневый код, для которого важны высокая производительность и незначительное потребление ресурсов. Комитет ISO по стандартизации C++ старательно работает над улучшением стандарта С++.
Сегодняшний С++ (сам язык и библиотека шаблонов) предоставляет средства для работы со сложными структурами данных и алгоритмами, предлагает возможность управления ресурсами с помощью автоматических указателей, а также поддерживает лямбда-выражения, константные выражения, переносимые средства управления потоками для параллельного (конкурентного) программирования, регулярные выражения, генераторы случайных чисел, исключения, шаблоны с переменным количеством аргументов (эта часть языка C++, отвечающая за шаблонные типы, является полной по Тьюрингу!), определенные пользователями литералы, переносимые средства работы с файловой системой и многое другое. Такое количество возможностей делает С++ универсальным языком, который идеально подходит для реализации высококачественного и высокопроизводительного программного обеспечения, применимого в различных отраслях.
Однако многие разработчики С++ охотно изучают сам язык, а библиотеку STL переводят на задний план. Применение языка C++ без поддержки стандартной библиотеки зачастую приводит к тому, что программы выглядят так, будто написаны с использованием классов, а не с учетом современных подходов. Это печально, ведь подобное применение языка не дает задействовать всю его мощь.
В четвертом издании своей книги The C++ Programming Language («Язык программирования С++»), включающем сведения в том числе о С++11, Бьярн Страуструп (Bjarne Stroustrup) пишет: «Пожалуйста, помните, что эти возможности языка и стандартной библиотеки призваны поддержать приемы программирования, позволяющие разрабатывать качественное ПО. Для решения какой-то конкретной задачи их нужно использовать в комбинации друг с другом — как кирпичики из одного набора, — а не отдельно и изолированно друг от друга».
Именно этому посвящена настоящая книга и все приведенные в ней примеры. Они максимально приближены к реальной жизни, причем без ориентации на какие-либо внешние библиотеки — только на STL. Данное обстоятельство значительно упрощает работу, избавляя от утомительной настройки среды. Я очень надеюсь, что представленные здесь примеры привнесут вдохновение в вашу работу с языком С++. Возможно, вы обнаружите, что некоторые из них являются отличными стандартными кирпичиками для решения задач более высокого уровня.
Темы, рассмотренные в этой книге
Глава 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 появилось много новых, не зависящих от операционной системы способов работы с файловыми путями и просмотра каталогов. В рамках главы мы научимся пользоваться этим инструментарием.
Что вам нужно для работы с книгой
Все примеры этой книги максимально просты и автономны. Их нетрудно скомпилировать и запустить, но, в зависимости от того, какими операционной системой и компилятором вы пользуетесь, эти действия могут различаться. Рассмотрим, как скомпилировать и запустить любой из примеров и на что нужно обратить особое внимание.
Компиляция и запуск примеров
Весь код из этой книги был разработан