Книги: [Классика] [Базы данных] [Internet/WWW] [Сети] [Программирование] [UNIX] [Windows] [Безопасность] [Графика] [Software Engineering] [ERP-системы] [Hardware]
Отрывок
О книге
Зачем написана эта книга
Вскоре после своего появления язык C++ превратился в фактический стандарт объектно-ориентированного программирования. Отсюда логично возникла потребность в стандартизации. Только при наличии общепринятого стандарта можно написать программу, работающую на разных платформах, от PC до больших машин. Кроме того, при наличии стандартных библиотек программист использует универсальные компоненты и без потери переносимости программ работает на более высоком уровне абстракции, а не пишет весь код с самого начала.
Процесс стандартизации C++ был начат в 1989 году международным комитетом ANSI/ISO. Комитет разработал стандарт, основанный на знаменитых книгах Бьярна Страуструпа «The C++ Programming Language» и «The Annotated C++ Reference Manual». В 1997 году работа над стандартом была завершена, а в 1998 году он был принят в качестве международного стандарта ISO и ANSI. Процесс стандартизации включал разработку стандартной библиотеки C ++, расширяющей базовые возможности языка и содержащей ряд компонентов общего назначения. Используя средства определения новых абстрактных и обобщенных типов, библиотека предоставляет в распоряжение программиста набор общих классов и интерфейсов. В частности, стандартная библиотека содержит:
- строковые типы;
- различные структуры данных (например, динамические массивы, связанные списки и бинарные деревья);
- различные алгоритмы (например, алгоритмы сортировки);
- классы для представления числовых данных;
- классы ввода-вывода;
- классы, обеспечивающие интернационализацию программ.
Все перечисленные возможности доступны через относительно простой программный интерфейс. Стандартные компоненты чрезвычайно важны для многих программ. В наши дни обработка данных обычно сопряжена с вводом, обработкой и выводом больших объемов данных, которые часто представляются в текстовом формате.
Стандартную библиотеку нельзя назвать простой и понятной. Чтобы работать с ее компонентами и пользоваться их преимуществами, недостаточно простого перечисления классов и их функций — требуется хорошее объяснение основных концепций и важных подробностей. Именно с этой целью и была написана эта книга. Сначала читатель знакомится с библиотекой и всеми ее компонентами на концептуальном уровне, а затем получает более подробную информацию, необходимую для практического программирования. Принципы использования всех компонентов поясняются конкретными примерами. Таким образом, книга представляет собой подробное введение в библиотеку C++ как для новичков, так и для более опытных программистов. Вооружившись новыми знаниями, вы сможете в полной мере использовать возможности стандартной библиотеки C++.
Необходимо отметить, что далеко не весь материал книги прост и очевиден. Стандартная библиотека весьма гибка, однако в любых нетривиальных ситуациях гибкость не дается даром. Учтите, что использование библиотеки иногда сопряжено со всевозможными каверзами и подвохами; на них указывается по мере изложения материала, а также предлагаются возможные способы обойти проблемы.
Что необходимо знать читателю
Предполагается, что читатель уже владеет языком C++ (в книге описаны стандартные компоненты C++, но не сам язык). Он должен быть знаком с концепциями классов, наследования, шаблонов и обработки ошибок. Тем не менее книга не требует досконального знания всех тонкостей языка. Действительно важные подробности описаны в книге, а мелочи существенны в основном для программистов, занимающихся реализацией библиотеки, а не ее использованием. Следует помнить, что язык изменялся в процессе стандартизации, поэтому некоторые ваши знания могут оказаться устаревшими. На с. приведен краткий обзор основных средств языка, необходимых для использования библиотеки. Прочитайте этот материал, если вы еще недостаточно хорошо освоили все новые средства C++ (например, ключевое слово typename и концепцию пространств имен).
Стиль и структура книги
Многие компоненты стандартной библиотеки C++ в той или иной степени зависят друг от друга, поэтому трудно описывать отдельные компоненты без упоминания остальных частей. Отсюда вытекают несколько возможных вариантов подачи материала. Например, можно было бы приводить описания в порядке их следования в стандарте C++. Однако просто описывать компоненты библиотеки C++ с самого начала — не лучшее решение. Также можно было бы начать с обзора всех компонентов, за которым расположить главы с подробными описаниями. Наконец, компоненты можно было бы отсортировать и попытаться выстроить их в порядке, обеспечивающем минимальное количество перекрестных ссылок. В итоге автор остановился на варианте, в котором сочетаются все три решения. Книга начинается с краткого изложения базовых концепций и вспомогательных средств библиотеки. Далее следуют описания основных компонентов, каждое из которых занимает одну или несколько глав. На первом месте стоит стандартная библиотека шаблонов (STL). Бесспорно, STL является самой мощной, самой сложной и самой интересной частью библиотеки C++, а ее архитектура в значительной степени влияет на другие компоненты. Затем рассматриваются более очевидные компоненты — специализированные контейнеры, строковые и числовые классы. Вероятно, следующий компонент — библиотека IOStream — уже знаком читателю и используется им в практической работе. В завершение будут рассмотрены проблемы интернационализации, которые оказывают некоторое влияние на работу библиотеки IOStream.
Знакомство с каждым компонентом начинается с описания целей и архитектурных решений, сопровождаемых примерами. Далее следует углубленное описание различных способов использования компонента и возникающих при этом проблем. Описание, как правило, заканчивается справочным разделом, в котором приводятся сигнатуры и определения классов компонента и их функций.
Ниже дано краткое содержание книги. В первых четырех главах представлена вводная информация о книге и стандартной библиотеке C++ в целом.
- Глава 1, «О книге». В этой главе (которую вы читаете в настоящий момент) представлены тема книги и ее содержание.
- Глава 2, «Знакомство с C++ и стандартной библиотекой». Краткий обзор истории стандартной библиотеки C++ и контекста ее стандартизации. Кроме того, в этой главе приводится общая информация по теме книги, в том числе описания новых языковых средств и концепции сложности.
- Глава 3, «Общие концепции». Базовые принципы строения библиотеки, понимание которых необходимо для использования ее компонентов. В частности, в этой главе представлено пространство имен std, формат заголовочных файлов и общие средства обработки ошибок и исключений.
- Глава 4, «Вспомогательные средства». Здесь рассматриваются некоторые вспомогательные средства, предназначенные для пользователей библиотеки и для самой библиотеки. В частности, описаны вспомогательные функции max(), min() и swap(), типы pair и auto_ptr, а также тип numeric_limits, предоставляющий дополнительную информацию о числовых типах данных в зависимости от реализации.
В главах с 5-й по 9-ю описаны различные аспекты STL.
- Глава 5, «Стандартная библиотека шаблонов». В этой главе представлены общие концепции стандартной библиотеки шаблонов (STL) — сборника контейнеров и алгоритмов, используемых для обработки наборов данных. Обстоятельно изложены основные принципы работы, проблемы и специальные приемы программирования, а также роли основных частей библиотеки.
- Глава 6, «Контейнеры STL». Глава посвящена контейнерным классам STL. Сначала мы рассмотрим различия между векторами, деками, списками, простыми и ассоциативными множествами, затем проанализируем сходство между ними; материал поясняется типичными примерами использования контейнеров. Глава завершается перечислением всех функций контейнеров в виде удобного справочника.
- Глава 7, «Итераторы STL». Подробное описание классов итераторов STL. В частности, рассматриваются разные категории итераторов, вспомогательные функции итераторов и адаптеры (потоковые итераторы, обратные итераторы и итераторы с возможностью вставки).
- Глава 8, «Объекты функций STL». Описание объектов функций STL.
- Глава 9, «Алгоритмы STL». Перечисление и описание алгоритмов STL. После краткого вступления и сравнения алгоритмов приводятся подробные описания алгоритмов, сопровождаемые примерами программ.
Главы с 10-й по 12-ю посвящены «простым» стандартным классам.
- Глава 10, «Специальные контейнеры». Описание специальных контейнерных классов стандартной библиотеки C++. В частности, здесь рассматриваются адаптеры для очередей и стеков, а также класс bitset, предназначенный для управления битовыми полями произвольной разрядности.
- Глава 11, «Строки». В этой главе представлены строковые типы стандартной библиотеки C++ (да, таких типов несколько!). В стандарте C ++ строки представлены как «очевидные» фундаментальные типы данных с возможностью использования разнообразных символов.
- Глава 12, «Числовые типы». Глава посвящена числовым компонентам стандартной библиотеки C++. В частности, в ней описаны типы комплексных чисел и классы для представления массивов числовых значений (применяются при работе с матрицами, векторами и уравнениями).
В главах 13 и 14 рассматриваются темы, относящиеся к вводу-выводу и интернационализации (эти две темы тесно связаны друг с другом).
- Глава 13, «Ввод-вывод с использованием потоковых классов». Описание подсистемы ввода-вывода C++ — стандартизированной формы известной библиотеки IOStream. В данной главе также приводятся некоторые важные подробности, которые нередко упускают из виду. Например, здесь рассматривается правильная методика определения и интеграции специальных каналов ввода-вывода, которые на практике часто реализуются неправильно.
- Глава 14, «Интернационализация». Глава посвящена основным принципам и классам, используемым при интернационализации программ. В частности, в ней рассматриваются проблемы разных кодировок и применение различных форматов при выводе вещественных чисел и дат.
Оставшуюся часть книги составили глава 15, список ссылок на ресурсы Интернета, библиография и алфавитный указатель.
- Глава 15, «Распределители памяти». Концепции моделей памяти в стандартной библиотеке C++.
- Список ссылок на ресурсы Интернета с дополнительной информацией по темам, рассмотренным в книге.
- Список книг и иных источников, которые упоминались, использовались или цитировались в этой книге.
- Алфавитный указатель.
Как читать эту книгу
Книга представляет собой гибрид учебника и структурированного справочника по стандартной библиотеке C++. Отдельные компоненты стандартной библиотеки C++ в той или иной степени независимы друг от друга, поэтому после глав 2–4 описания компонентов можно читать в любом порядке. Не забывайте, что главы 5–9 посвящены одному и тому же компоненту. Чтобы понять материал остальных глав о STL, начните с вводного описания STL в главе 5.
Программист C++, желающий освоить основные принципы и все аспекты стандартной библиотеки, может просто читать эту книгу от начала до конца, пропуская справочные разделы. При работе с некоторыми компонентами стандартной библиотеки C++ нужную информацию проще всего найти по алфавитному указателю, который сделан достаточно подробным, чтобы свести к минимуму время поиска.
Как известно, все новое лучше всего изучается на конкретных примерах. По этой причине материал книги поясняется многочисленными примерами, от нескольких строк кода до целых программ. В последнем случае имя файла с программой указывается в первой строке комментария. Файлы примеров можно загрузить с web-сайта оригинального издания этой книги (http://www.josuttis.com/ libbook) или с web-сайта издательства «Питер» (http://www.piter.com/download).
Текущая ситуация
На момент написания книги стандарт C++ был полностью подготовлен. Некоторые компиляторы еще не соответствуют новому стандарту. Вероятно, ситуация изменится в ближайшем будущем, однако нельзя исключать того, что часть материала книги не будет соответствовать некоторым системам, и читателю придется вносить изменения в примеры под специфику конкретной платформы. Практически все примеры программ нормально компилируются в EGCS версии 2.8 и выше; реализации этого компилятора для многих платформ бесплатно распространяются через Интернет (http://egcs.cygnus.com/) и на компакт-дисках со сборниками программ.
От издателя перевода
Ваши замечания, предложения, вопросы отправляйте по адресу электронной почты comp@piter.com (издательство «Питер», компьютерная редакция).
Мы будем рады узнать ваше мнение!
Все исходные тексты, приведенные в книге, вы сможете найти по адресу http:// www.piter.com/download
Подробную информацию о наших книгах вы найдете на web-сайте издательства http://www.piter.com
Начало
Cодержание
Отрывок
[Заказать книгу в магазине "Мистраль"]