C++. Сборник рецептов

на главную - закладки

Жанры

Поделиться:

C++. Сборник рецептов

Шрифт:

Предисловие

C++ работает практически на любой платформе и используется в бесчисленном количестве приложений. Если вы купили или собираетесь купить эту книгу, вы, вероятно, являетесь программистом, инженером или исследователем, пишущим одно из таких приложений. Но независимо от того, что и для какой платформы вы пишете, велика вероятность, что вам придется снова решать многие из тех же проблем, которые уже решены другими программистами на C++ много лет назад. В этой книге мы будем решать многие из часто встречающихся проблем и объяснять каждое из решений.

Независимо от того, программируете ли вы на C++ уже много лет или используете его

недавно, вы, скорее всего, знакомы с фрагментами, которые приходится переписывать для каждого нового проекта: арифметика и синтаксический анализ дат и времени, манипуляции со строками и текстом, работа с файлами, синтаксический анализ XML, использование стандартных контейнеров и т.п. Решения для всех таких проблем приведены в этой книге. Для некоторых случаев (например, арифметические операции с датами и временем) стандартная библиотека почти не содержит поддержки. Для других (например, работа со строками) стандартная библиотека содержит функционально богатые классы, но они не могут делать все, и решения некоторых очень часто встречающихся задач оказываются громоздкими.

Формат очень прост. Каждый рецепт содержит описание проблемы и код решения, а большинство содержит последующее обсуждение. Мы попытались быть прагматиками и решать проблемы, не слишком отклоняясь от цели, но во многих случаях имеются связанные проблемы, решение которых также очень полезно (или просто интересно), и мы приводим одну или две страницы пояснений.

Эта книга посвящена решению общих проблем с С++, но не является книгой для изучения С++. Мы предполагаем, что вы, по крайней мере, обладаете базовыми знаниями C++ и объектно-ориентированного программирования. В частности, будет полезно, если вы знакомы, по крайней мере, с:

• наследованием и виртуальными функциями С++;

• стандартной библиотекой;

• компонентами Standard Template Library (стандартной библиотекой шаблонов) (контейнерами, итераторами и алгоритмами);

• шаблонами.

Для чтения этой книги нет строгих предварительных требований, но наличие базовых знаний окажется весьма кстати.

О примерах

При создании наших примеров кода мы стремились к простоте, переносимости и производительности. Разработка каждого решения использовала сходный метод: если возможно, использовался стандартный C++ (язык или библиотека); если невозможно, то в качестве замены использовался стандарт де-факто. Например, многие из рецептов, относящихся к строкам, применяют стандартный класс

string
, а большинство математических и научных рецептов используют стандартные численные типы, контейнеры и шаблоны. Стандартная библиотека имеет мощную поддержку в этих областях, так что стандартных возможностей более чем достаточно. Однако C++ либо имеет слабую стандартную поддержку, либо не имеет ее вовсе в части многопоточности или синтаксического анализа XML. Таким образом, мы используем поддержку многопоточности, предоставляемую библиотекой Boost Threads, а для функциональности синтаксического анализа XML-парсер (parser) Xerces.

Часто в C++ имеется множество способов сделать одно и то же, что дает разработчикам определенную гибкость, но и приводит к спорам. Большая часть примеров иллюстрирует наилучшее общее решение, которое мы смогли найти, но это не означает, что не существует еще лучшего решения. Если есть альтернативные решения, которые оказываются лучшими в одних случаях, но не являются таковыми в других (возможно, решение, использующее стандартную библиотеку, некрасиво или неинтуитивно — в этом случае мы показываем альтернативное решение с использованием Boost), мы представляем альтернативные решения, чтобы показать

вам различные имеющиеся решения.

Большое количество примеров используют шаблоны. Если у вас нет опыта в написании шаблонов, вам следует получить его как можно скорее. В этой книге очень мало вводного материала по шаблонам, за исключением двух рецептов в главе 8: 8.11 и 8.12. Большая часть интересных разработок на C++ относится к области метапрограммирования с использованием шаблонов и методического проектирования.

В момент написания этой книги в сообществе C++ происходят большие изменения. Первый технический отчет (называемый TR1) более или менее стабилен. Он стандартизирует набор функций, которые будут добавлены в следующую версию стандарта С++. Не существует требования поддержки его реализациями стандартной библиотеки, но многие поставщики уже начали реализовывать TR1, и можно ожидать, что скоро эти функции появятся в поставляемых компиляторах. Многие из библиотек из TR1 впервые появились в проекте Boost.

Мы активно используем библиотеки из Boost. Boost — это набор рецензируемых переносимых библиотек с открытым кодом, который заполняет многие пробелы в стандартной библиотеке. Текущая версия в момент написания книги 1.32, и скоро должна появиться версия 1.33. В примерах мы приводим много указаний на конкретные библиотеки Boost. Для получения дополнительной информации по Boost посетите Web-сайт проекта по адресу www.boost.org.

Соглашения, принятые в этой книге

В этой книге используются следующие типографские соглашения.

Курсив

Указывает на новые термины, URL, адреса e-mail, имена файлов, расширения файлов, пути, директории, утилиты Unix, команды и параметры командной строки.

<...>

В угловые скобки заключены элементы, которые требуется указать в командах и параметрах командной строки, и они выделены курсивом.

Шрифт постоянной ширины

Указывает код или его фрагменты. Например, шрифтом постоянной ширины набраны имена классов, методов и другие подобные элементы, при их появлении в тексте.

Жирный шрифт постоянной ширины

Показывает ввод пользователя в примерах ввода-вывода.

Курсив постоянной ширины

Указывает задаваемые пользователем элементы в примерах синтаксиса.

Указывает на подсказки, советы или общие замечания.

Указывает на предупреждения или предостережения.

Использование примеров кода

Целью этой книги является помощь в вашей работе. Вы можете использовать код этой книги в ваших программах и документации. Вам не требуется обращаться к нам за разрешением, если вы не воспроизводите значительные фрагменты кода. Например, написание программы, которая использует несколько небольших кусков кода из этой книги, не требует разрешения. Продажа или распространение CD-ROM с примерами книг O'Reilly требует разрешения. Ответы на вопросы с помощью цитат из этой книги и цитирования кода не требуют разрешения. Встраивание значительного количества примеров кода из этой книги в вашу документацию к продукту требует разрешения.

Комментарии:
Популярные книги

Звезда сомнительного счастья

Шах Ольга
Фантастика:
фэнтези
6.00
рейтинг книги
Звезда сомнительного счастья

Царевна Софья

Карнович Евгений Петрович
Всемирная история в романах
Проза:
историческая проза
6.25
рейтинг книги
Царевна Софья

Имперец. Земли Итреи

Игнатов Михаил Павлович
11. Путь
Фантастика:
героическая фантастика
боевая фантастика
5.25
рейтинг книги
Имперец. Земли Итреи

Если твой босс... монстр!

Райская Ольга
Любовные романы:
любовно-фантастические романы
5.50
рейтинг книги
Если твой босс... монстр!

Измена. Верни мне мою жизнь

Томченко Анна
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Верни мне мою жизнь

Законы Рода. Том 10

Андрей Мельник
10. Граф Берестьев
Фантастика:
юмористическая фантастика
аниме
фэнтези
5.00
рейтинг книги
Законы Рода. Том 10

Держать удар

Иванов Дмитрий
11. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Держать удар

Идеальный мир для Лекаря 4

Сапфир Олег
4. Лекарь
Фантастика:
фэнтези
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 4

На границе империй. Том 3

INDIGO
3. Фортуна дама переменчивая
Фантастика:
космическая фантастика
5.63
рейтинг книги
На границе империй. Том 3

Честное пионерское! Часть 1

Федин Андрей Анатольевич
1. Честное пионерское!
Фантастика:
попаданцы
альтернативная история
7.00
рейтинг книги
Честное пионерское! Часть 1

Призыватель нулевого ранга

Дубов Дмитрий
1. Эпоха Гардара
Фантастика:
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Призыватель нулевого ранга

В зоне особого внимания

Иванов Дмитрий
12. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
В зоне особого внимания

70 Рублей - 2. Здравствуй S-T-I-K-S

Кожевников Павел
Вселенная S-T-I-K-S
Фантастика:
боевая фантастика
постапокалипсис
5.00
рейтинг книги
70 Рублей - 2. Здравствуй S-T-I-K-S

Камень. Книга шестая

Минин Станислав
6. Камень
Фантастика:
боевая фантастика
7.64
рейтинг книги
Камень. Книга шестая