Б. Страуструп - Язык программирования С++. Специальное издание, 3-изд. Бином. 2004 (1160791), страница 107
Текст из файла (страница 107)
16.1.2. Организация стандартной библиотеки Средства стандартной библиотеки определены в пространстве имен зЯ и представлены набором заголовочных файлов. Они идентифицируют основные части библиотеки. Таким образом, их перечне.ление дает представление о библиотеке и предоставляет способ ее описания в этой н последующих главах. Ниже в этом подразделе приведен список заголовочных файлов, сгруппированных по функциям, с краткими пояснениями и ссылками, где. онн рассматрившотся. Файлы сгруппированы так, чтобы соответствовать организации стандарта.
Ссылка на стандарт (как, например, з з.18.1) означает, что данная возможность здесь не рассматривается. Станлартный заголовочный файл, имя которого начинается с буквы с, эквивалентен заголовочному файлу в стандартной библиотеке С. Д.ля каждого заголовочного файла <Х.й>, определяющего часть стандартной библиотеки С в глобальном пространстве имен, а также в пространстве имен з(г(, существует заголовок <сХ>, определяющий эти же имена только в пространстве имен з(г( (см.
8 9.2.2). Глава 18. Организация библиотеки и контейнеры 488 Контейнеры Ассоциативные контейнеры ти1йтар и тиШзе1 можно найгти соответственно в <тар> и <зег>. Контейнер рггогг1у уиеие (очередь с приоритетом) объявлен в <уиеие>. Основные утилиты <иггуг1у> <Гиггс1гопи1> <тетогу> <сггте> ~ 17.1А, 8 17А.1.2 й 18А 9 19АА 9 з.20.5 операторы и пары объектъг-фуггкции распределители памяти для контейнеров время и дата в стиле С В ваго.ловочном файле <тетогу> также содержится шаблон аи1о рбп который в ос- новном используется для сглаживания взаимодействия между указателями и исклю- чениями Я 14.4.2). Итераторы <ггегагог> итерапюрьг и их поддержки Глава 19 Итераторы обеспечивают механизм приспособления стандартных алгоритмов для работы со стандартными контейнерами и другими подобными типами Я 2.7.2, 9 19.2.1).
Алгоритмы <а1уогггйт> <сзЫ(г6> Глава 18 9 18.11 основньге алгоритмы 6зеагсЬ () дзогг () Типичный универсальный алгоритм может быть применим к любой последовательно- сти Я 3.8, 9 18.3) элементов любого типа. Функции ЬзеагсЬ () и узог1 () пз стандартной библиотеки С применимы к встроенным массивам элементов, тип которых пе имеет копирующих конструкторов и деструкторов, определенных пользователем Я 7.7). Диагностика <ехсерггоп> <зЫехсер1> <саззегГ <сеггпо> 9 14.10 9 14.10 () 24.3.7.2 6 20.4.1 класс исключений стандартные исключения макросы утверждений обработки ошибок в стиле С Утверждения, основанные на исключениях, описаны в Э 24.3.7.1.
<иес1ог> <1гзг> <ггег7ие> <уиеие> <з1асЬ> <тар> <зе1> <Ьггзег> одномернъш массив эле.ментов Т двусвезный список элементов Т очередь элелгентов Т с двулгл концами очередь элементов Т стек элементов Т ассоциативныймассив элементов Т набор элелтнтов Т набор булевских переменных ч 16.3 9 17.2.2 гг 17.2.3 (г 17 3 2 з 17.3.1 9 17А.1 з 17А.З з 17.5.3 . 489 16.1.
Проектирование стандартной библиотеки Строки Глава 20 9 20.4.2 9 20А.2 1) 20А.1 9 20.4 <в1ппу> <сс1уре> <сшс1уре> <св1пау> <свсйаг> 9 20А.1 <сэ1с(116> Заголовочный файл <сз1ппйг> объявляет семейство функций в1г1еп (), в1гсру () и т. п. Заголовочный файл <свЫ116> объявляет функции а1о1 () и а1ог (), которые преобразу- ют символьные С-строки в численные значения.
Ввод/вывод <гов1шй> <1ов1геапт> 9 21.1 9 21.2.1 Манипуляторы — это объекты, которыми пользуются, чтобы манипулировать состоянием потока 1например изменить формат вывода чисел с плавающей точкой) Я 21А.6). Локализация <1оса1е> <с1оса1е> представляет культурные различия 9 21.7 представляет культурные различия в стиле С 9 21.7 Заголовочный файл 1оса1е локализует различия — например, в формате вывода дат, в символах для обозначения валют и критериях сравнения строк — в человеческих язы- ках и культурах.
Поддержка языка <11т11в> <с11т11в> числовые ограничения 9 22.2 макросъг пределов скалярнь х чисел в стиле С 9 22.2.1 <гов> <вг еатби1> <1в1 еагп> <оз1геагп> <г'отапгр> <вв1геат> <сс1уре> <1в1сеат> <св1<11о> <сшсйаг> строка элементов Т классификация символов классификация символов из расширенною набора функции над строками в стиле С функг1ии над строками символов из расширенного набора в сгпиле С функции над строками в стиле С предварительные обьявления средств ввода/вывода согандартнъге обьекты и операции с потоками ввода/вывода ба'овые классы потоков ввода/вывода буферизация потоков шаблон потока ввода шаблон потока вывода манипуляторы потоки в строки/из строк функции для работьг с символами потоки ввода/вывода в файлы семейство функций ввода/въгвода рпп1г () ввод/вывод символов из расширенного набора в стиле рплю () 9 21.2.1 6 21.6 9 21.3.1 9 21З.1 ~ 2 1.4.6.2 9 21.5.3 9 20.4.2 9 21,5.1 9 21.8 9 21.8 Глава 16.
Организация библиотеки и контейнеры 490 Поддержка языка 1продолжение) макросы пределов чисел с плавающей томкой в стиле С динамическое распределение памяпьи поддержка идентификации типов во время вьтолнения поддержки обработки исклюмвний языковая поддерлска библиотеки С поддержка функций с перемвным числолг аргументов раскрутка стека в стиле С завершение программ систелтые часьч обработка сигналов в стиле С <сЯоа1> <пеш> < 1уре1ггуо> <ехсер1гогг> < свйЫе)> <свЫащ> <све1)тр> < свгайЬ> <с1гте> <св1дпа1> 9 22.2.1 9 16.1.3 9 15.4.1 9 14,10 9 6.2.1 9 7.6 9 з.18.7 9 9.4.1.1 9 Г.4.4.1 9 з.18.7 Заголовочный файл <вЫггеу> определяет: тип значений, которые возвращает функция вггео1 11 вгее б тнп результата вычитания указателей и индексов массива, р1гйЯг (9 6.2.1) и злосчастный макрос МЛАД 5.1.1).
Раскрутка стека в стиле С 1с использованием веЦтр и 1опу)тр из <слег)тр>) несовместима с обработкой исключений Я 8.3, глава 14, приложение Д) и лучше се избегать. Числа <сотр1ек> < оа1аггау> <питеггс> <сгпа1Ь> <свЫДЬ> 9 22.5 9224 Я 22.6 9 22.3 з 22.7 комплексные числа и операции с ними вектлора из гавел и операции с ними распросгпраненны е числовые операции общие математические функции случайные числа в стиле С Так уж исторически сложилось, что аЬв 11 и с1го (1 находятся в <свйШЬ>, а нс в <стагй> с остальными математическими функциями.
Пользователю и разработчику библиотеки не разрешается добавлять или убирать объявления из стандартных заголовочных файлов. Также недопустимо пытаться изменить содержимое заголовочных файлов, определяя макросы до вставки заголовочных файлов, или пытаться изменить смысл объявлений в заголовочных файлах путем объявлений в их контексте Я 9.2.3). Любая программа пли реализация, играющая в подобные игры, не согласуется со стандартом, и код, основанный на таких трюках, не переносим.
Даже если сегодня он работает, следующая версия любой части реализации может их разрушить, Избегайте таких трюков. Д,зя использования возможностей стандартной библиотеки должен быть включен ее заголовочный файл. Написание соответствующих объявлений самостоятельно не соответствует стандарту. Дело в том, что некоторые реализации языка С+ъ оптимизируют процесс компиляции, основываясь на включении стандартных заголовочных файлов, а другие обеспечивают оптимизированную реализацию средств стандартной библиотеки, вводимых заголовочными файлами.
В общем, программисты пс могут, да и нс должны знать, как разработчики данной реализации используют стандартные заголовочные файлы. Однако программисты могут приспосабливать вспомогательные шаблоны, такнс как виар 1) Я 16.3.9), для нестандартных библиотек и типов, определяемых пользователем. 491 16.2. Проектирование контейнеров 16.1.3. Поддержка языка Небольшую часть стандартной библиотеки занимает поддержка языка — то есть средства, которые должны присутствовать для запуска программ. Библиотсчгчые функции, поддерживающие операторы пеш и с/е(ете, обсуждаются в 9 6.2.6, 9 10А.(1, 9 14.4А и 9 15,6. Они представлены в заголовочном файле <пеш>. Идентификацизг типов во время выполнения опирается на класс 1уре (п/о, который описан в 9 15.4А и представлен в <1уре(п/о>. Стандартные классы исключений рассматриваются в 9 14,10 и представлены в заголовочных файлах <пеш>, <1уре(п~о>, «оз>, <ехсер11оп> и <з1с(ехсер1>.
Запуск программы н ее завершение рассматриваются в 9 3.2, 9 9.4 и 9 10А.9. 16.2. Проектирование контейнеров 16.2.1. Специализированные контейнеры и итераторы Очевидным приближением к реализации вектора и списка является их определение таким образом, который лучше всего отвечает цели их использовагггия: 1етр1а1е <с(аев Т> с1авз 1>ес1ог( //отпимальный риб(1с: ехрйсй Ъесгог(лозе 1гг( //инициализация, чтобы заполнипгь //и объекгпов значением 1О Тйорега1ог('г (з1ее 1п)г //обращение поггндексу //.— гет р(а 1е<с1аз в Т> с(азз Т1з1 ( риб1иь с1азз Т.(пй ( /* ...
'/ ); // оптимольньй // первона гально пустой // раззгеепгить перед первызг элеменгпом // получить текущий элемент 1„(з1 ((; ооЫри1 (Т*( Т'уег((, Контейнер — зто объект, содержащий другие объекты. Примерами контейнеров являются списки, вектора и ассоциативные массивы. Как правило, в контейнер можно добавлять объекты и удалять их из него. Естественно, пользователям зту идею можно представить по-разному. Стандартные библиотечные контейнеры С++ были построены в соответствии с двумя критериями: обеспечение максимума свободы в построении индивидуальных контейнеров, и в то же время предоставление лля пользователей общего интерфейса.