- Фантастика и фэнтези
- Ироническое фэнтези
- Стимпанк
- Детективная фантастика
- Киберпанк
- Попаданцы
- LitRPG
- Космоопера
- Технофэнтези
- Городская фантастика
- Русское фэнтези
- Юмористическая фантастика
- Космическая фантастика
- Боевое фэнтези
- Эпическая фантастика
- Зарубежная фантастика
- Книги магов
- Мистика
- Разная фантастика
- Разное фэнтези
- Любовное фэнтези
- Романтическая фантастика
- Городское фентези
- Историческая фантастика
- Историческое фэнтези
- Социально-философская фантастика
- Сказочная фантастика
- Иностранное фэнтези
- Романтическое фэнтези
- Ироническая фантастика
- Ужасы и Мистика
- Постапокалипсис
- Героическая фантастика
- Фэнтези
- Научная Фантастика
- Социально-психологическая
- Альтернативная история
- Боевая фантастика
- Разная литература
- Пословицы, поговорки
- Шахматы
- Визуальные искусства
- Фанфик
- Авто и ПДД
- Военное
- Отраслевые издания
- Гиды, путеводители
- Зарубежная образовательная литература
- Военная история
- Цитаты из афоризмов
- Современная литература
- Великолепные истории
- Начинающие авторы
- Современная зарубежная литература
- Боевые искусства
- Изобразительное искусство, фотография
- Кино
- Литература 19 века
- Недвижимость
- Музыка, музыканты
- Готические новеллы
- Истории из жизни
- Культура и искусство
- Спецслужбы
- Зарубежная прикладная литература
- Музыка, танцы
- Подростковая литература
- Прочее
- Военная техника, оружие
- Газеты и журналы
- Периодические издания
- Домоводство, Дом и семья
- Любовные романы
- Экономическая литература
- Научные и научно-популярные книги
- О животных
- Биохимия
- Культурология
- Юриспруденция
- Политика
- Психотерапия
- Языкознание
- Научпоп
- Медицина
- Психология, личное
- Радиотехника
- Филология
- Педагогика
- Образовательная литература
- Деловая литература
- Физика
- Науки: разное
- Химия
- Воспитание детей, педагогика
- Детская психология
- Зарубежная публицистика
- Биология
- Архитектура
- Зарубежная психология
- Науки о космосе
- Социология
- Математика
- География
- Беременность, ожидание детей
- Литературоведение
- Транспорт, военная техника
- Обществознание
- Зоология
- География
- Альтернативная медицина
- Иностранные языки
- Ветеринария
- Рефераты
- Астрология
- Биофизика
- Экология
- История Европы
- Учебники
- Шпаргалки
- Государство и право
- Ботаника
- Религиоведение
- История
- Техническая литература
- Прочая научная литература
- Психология
- Детективы и Триллеры
- Справочная литература
- Проза
- Новелла
- Юмор
- Проза
- Историческая проза
- Русская современная проза
- Советская классическая проза
- Повести
- Очерки
- Эссе
- Рассказы
- Зарубежная современная проза
- Сентиментальная проза
- Зарубежная классика
- Афоризмы
- Эпистолярная проза
- Феерия
- Семейный роман/Семейная сага
- Разное
- Антисоветская литература
- Магический реализм
- Русская классическая проза
- Современная проза
- О войне
- Контркультура
- Классическая проза
- Поэзия, Драматургия
- Детская литература
- Детская фантастика
- Детские остросюжетные
- Детские стихи
- Детские приключения
- Внеклассное чтение
- Учебная литература
- Зарубежные детские книги
- Бизнес
- Загадки
- Книги для подростков
- Школьные учебники
- Детский фольклор
- Книги для дошкольников
- Детские детективы
- Детская познавательная и развивающая литература
- Буквари
- Прочая детская литература
- Сказка
- Детская проза
- Детская образовательная литература
- Юмор
- Документальные книги
- Бизнес
- Внешнеэкономическая деятельность
- Тайм-менеджмент
- Кадровый менеджмент
- О бизнесе популярно
- Управление, подбор персонала
- Бизнес
- Менеджмент и кадры
- Продажи
- Экономика
- Ценные бумаги и инвестиции
- Малый бизнес
- Делопроизводство, офис
- Корпоративная культура, бизнес
- Банковское дело
- Финансы
- Зарубежная деловая литература
- Ораторское искусство / риторика
- Личные финансы
- Интернет-бизнес
- Поиск работы
- Государственное и муниципальное управление
- Бухучет и аудит
- Работа с клиентами
- Менеджмент
- Краткое содержание
- Личная эффективность
- Переговоры
- Приключения
- Старинная литература
- Религия и духовность
- Компьютеры и Интернет
- Блог
Читаем без скачивания C++17 STL Стандартная библиотека шаблонов - Яцек Галовиц
Шрифт:
Интервал:
Закладка:
Можно сгенерировать пример из командной оболочки с помощью 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.
Предупреждения для первопроходцев
Возможно, некоторые примеры из этой книги у вас не будут компилироваться. Все зависит от того, какая часть C++17 STL реализована в вашем дистрибутиве STL.
При написании книги приходилось добавлять префикс пути experimental/ к заголовкам <execution_policy> и <filesystem>. Кроме того, в каталоге experimental/ вашего дистрибутива STL могут находиться дополнительные заголовочные файлы, например algorithm, numeric и т.д., в зависимости от того, насколько новым и стабильным является дистрибутив.
Это верно и для пространств имен, поддерживающих новейшие возможности. Элементы библиотеки, включенные в экспериментальную часть STL, обычно экспортируются внутрь пространства имен std::experimental (а не std).
Для кого предназначено издание
Эта книга не для вас, если раньше вы не писали программы на С++ и не компилировали их. Однако при условии, что вы уже имеете базовые сведения об этом языке, она идеально подойдет в качестве руководства по С++.
Кроме того, книга будет вам полезна, если вы узнали себя в одном из следующих описаний:
□ вы изучили основы С++, но теперь не знаете, что делать дальше, поскольку разница между вашими знаниями и знаниями профессионала — разработчика на С++ все еще велика;
□ вы хорошо знаете С++, но плохо ориентируетесь в STL;
□ вы знаете С++ по одному из старых стандартов, C++98, C++11 или C++14. Как бы давно вы ни использовали С++ в последний раз, книга познакомит вас со множеством новых возможностей STL.
Разделы
В издании вы найдете несколько заголовков, встречающихся чаще других («Как это делается» и «Как это работает»). В этих разделах даны четкие инструкции, как работать с примером.
Как это делается
В этом подразделе описываются шаги, необходимые для выполнения примера.
Как это работает
Здесь обычно содержится подробное объяснение действий из предыдущего подраздела.
Дополнительная информация
В этот подраздел включены дополнительные сведения о примере, позволяющие читателю более детально ознакомиться с темой.
Условные обозначения
В книге информация разного рода оформлена различными способами. Рассмотрим несколько вариантов оформления и их значение.
Код в тексте, имена баз данных, каталогов и файлов, а также расширения файлов, пути к файлам, ненастоящие (dummy) URL, пользовательский ввод и имена пользователей Twitter выделяются так: «Следующий шаг — редактирование файла build.properties».
Блок кода выглядит следующим образом:
my_wrapper<T1, T2, T3> make_wrapper(T1 t1, T2 t2, T3 t3)
{
return {t1, t2, t3};
}
Новые термины и важные слова выделены курсивом. Слова, которые вы видите на экране, например меню или диалоговые окна, выглядят в тексте так: «После завершения нажмите кнопку Activate (Активизировать)».
Предупреждения и важные примечания оформлены так.
Советы и приемы оформлены таким образом.
Загрузка примеров кода
Файлы с примерами кода для книги можно скачать по адресу https://github.com/PacktPublishing/Cpp17-STL-Cookbook. Для этого выполните следующие шаги.
1. Перейдите по указанному выше адресу.
2. Нажмите кнопку Clone or Download (Клонировать или скачать).
3. На открывшейся панели выберите ссылку Download ZIP (Скачать Zip).
После загрузки файла убедитесь, что распаковали или извлекли каталог с помощью последней версии одной из следующих программ:
□ WinRAR/7-Zip для Windows;
□ Zipeg/iZip/UnRarX для Mac;
□ 7-Zip/PeaZip для Linux.
Мы предлагаем и другие пакеты с кодом из нашего обширного каталога книг и видеороликов, доступного на https://github.com/PacktPublishing/. Обратите на них внимание!
Глава 1
Новые возможности С++17
В этой главе:
□ применение структурированных привязок (декомпозиции) для распаковки набора возвращаемых значений;
□ ограничение области видимости переменных в выражениях if и switch;
□ новые правила инициализатора с фигурными скобками;
□ разрешение конструктору автоматически вывести полученный тип класса шаблона;
□ упрощение принятия решений во время компиляции с помощью constexpr-if;
□ подключение библиотек, перечисленных в заголовочных файлах, с использованием встраиваемых переменных;
□ реализация вспомогательных функций с помощью выражений свертки.
Введение
Функциональность языка C++ значительно расширилась с выходом C++11, C++14 и недавней версии C++17. На текущий момент он совсем не похож на себя образца десятилетней давности. Стандарт С++ упорядочивает не только язык, но и STL.
В этой книге на большом количестве примеров показаны наилучшие способы использования возможностей STL. Но для начала в текущей главе мы сконцентрируемся на самых важных особенностях языка. Изучив их, вы сможете писать легко читаемый, удобный в сопровождении и выразительный код.
Мы рассмотрим, как получить доступ к отдельным элементам пар, кортежей и структур с помощью структурированных привязок и ограничить область видимости переменных благодаря новым возможностям по инициализации переменных внутри выражений if и switch. Синтаксические двусмысленности, появившиеся в C++11 из-за нового синтаксиса инициализатора с фигурными скобками, который выглядит так же, как синтаксис списков инициализаторов, были исправлены в новых правилах инициализатора с фигурными скобками. Точный тип экземпляра шаблонного класса может быть определен по аргументам, переданным его конструктору, а если разные специализации шаблонного класса выполняются в разном коде, то это легко выразить с помощью constexpr-if. Обработка переменного количества параметров в шаблонных функциях значительно упростилась благодаря новым выражениям свертки. Наконец, стало гораздо удобнее определять доступные