Стандартная библиотека языка C++
В языке программирования C++ термин Стандартная Библиотека означает коллекцию классов и функций, написанных на базовом языке. Стандартная Библиотека поддерживает несколько основных контейнеров, функций для работы с этими контейнерами, объектов-функции, основных типов строк и потоков (включая интерактивный и файловый ввод-вывод), поддержку некоторых языковых особенностей, и часто используемые функции для выполнения таких задач, как, например, нахождение квадратного корня числа. Стандартная Библиотека языка C++ также включает в себя спецификации стандарта ISO C90 стандартной библиотеки языка Си. Функциональные особенности Стандартной Библиотеки объявляются внутри пространства имен std.
Стандартная библиотека шаблонов (STL) — подмножество стандартной библиотеки C++ и содержит контейнеры, алгоритмы, итераторы, объекты-функции и т. д.[1], хотя некоторые программисты используют термин «STL» вместе (или попеременно) с термином «Стандартная библиотека C++».
Заголовочные файлы стандартной библиотеки C++ не имеют расширения «.h».
Стандартная библиотека C++ содержит последние расширения C++ стандарта ANSI (включая библиотеку стандартных шаблонов и новую библиотеку iostream). Она представляет собой набор файлов заголовков. В новых файлах заголовков отсутствует расширение H.[2]
Реализации
| Название | Организация | Домашнаяя страница | Акроним | Лицензия | Последний выпуск |
|---|---|---|---|---|---|
| Стандартная библиотека библиотека GNU | GNU Project и Free Software Foundation | [1] | libstdc++ | GPLv3 | Неизвестно |
| Стандартная библиотека библиотека LLVM | LLVM Developer Group | [2] | libc++ | Apache License 2.0 with LLVM Exceptions | Каждые 2 недели |
| Стандартная библиотека библиотека NVIDIA | Nvidia | [3] | libcu++ | Apache License 2.0 with LLVM Exceptions | 12 октября 2022 |
| Стандартная библиотека библиотека Microsoft | Microsoft | [4] | MSVC STL | Apache License 2.0 with LLVM Exceptions | Ежедневно |
| Стандартная библиотека библиотека HPX для параллелизма и многопоточности | STELLAR Group | [5] | HPX | Boost Software License 1.0 | 6 августа 2022 |
| Electronic Arts STL | Electronic Arts | [6] | EASTL | BSD 3-Clause License | 20 октября 2021 |
| Dinkum | Dinkumware | [7] | Неизвестно | Коммерческая | Неизвестно |
| Стандартная библиотека библиотека Cray | Cray User Group | [8] | Неизвестно | Коммерческая | Неизвестно |
Была разработана фирмой Rogue Wave Software, позже была передана Apache Software Foundation.[3] Однако спустя 5 лет с момента выхода последней версии было решено закончить работу над проектом и переместить его в Apache Attic.[4]
Следующие библиотеки реализуют значительную часть стандартной библиотеки C++:
| Название | Домашняя страница | Описание |
|---|---|---|
| Abseil | [9] | Коллекция библиотек, которая используется в проектах Google |
| Folly | [10] | Набор библиотек C++14 которые используются Facebook |
| Bareflank Support Library | [11] | Библиотека, в которой все возможно исполнить на этапе компиляции |
Стандартные заголовочные файлы
Нижеперечисленные файлы содержат объявления Стандартной Библиотеки.
- <bitset>
- Реализует специализированный класс контейнеров
std::bitset— битовый массив. - <deque>
- Реализует шаблон класса контейнера
std::deque— двусвязная очередь. - <list>
- Реализует шаблон класса контейнера
std::list— двусвязный список. - <map>
- Реализует шаблоны классов контейнеров
std::mapиstd::multimap— Ассоциативный массив и мультиотображение. - <queue>
- Реализует класс адаптер-контейнера
std::queue— односторонняя очередь. - <set>
- Реализует шаблоны классов контейнеров
std::setиstd::multiset— сортированные ассоциативные контейнеры или множества. - <stack>
- Реализует класс адаптер-контейнера
std::stack— стек. - <vector>
- Реализует шаблон класса контейнеров
std::vector— динамический массив.
- <algorithm>
- Реализует определения многих алгоритмов для работы с контейнерами.
- <functional>
- Реализует несколько объект-функций, разработанных для работы со стандартными алгоритмами.
- <iterator>
- Реализует классы и шаблоны для работы с итераторами.
- <locale>
- Реализует классы и шаблоны для работы с локалями.
- <memory>
- Реализует инструменты управления памятью в C++, включая шаблон класса
std::auto_ptr. - <stdexcept>
- Содержит стандартную обработку ошибок классов, например,
std::logic_errorиstd::runtime_error, причем оба происходят изstd::exception. - <utility>
- Реализует шаблон класса
std::pairдля работы с парами (двучленными кортежами) объектов.
<regex>
- Новое в C++11. Предоставляет утилиты для сопоставления строк с шаблоном с помощью регулярных выражений.
- <fstream>
- Реализует инструменты для файлового ввода и вывода. Смотрите fstream.
- <ios>
- Реализует несколько типов и функций, составляющих основу операций с iostreams.
- <iostream>
- Реализует основы ввода и вывода языка C++. Смотрите iostream.
- <iosfwd>
- Реализует предварительные объявления нескольких шаблонов классов, связанных с вводом-выводом.
- <iomanip>
- Реализует инструменты для работы с форматированием вывода, например базу, используемую при форматировании целых и точных значений чисел с плавающей запятой.
- <istream>
- Реализует шаблон класса
std::istreamи других необходимых классов для ввода. - <ostream>
- Реализует шаблон класса
std::ostreamи других необходимых классов для вывода. - <sstream>
- Реализует шаблон класса
std::sstreamи других необходимых классов для работы со строками. - <streambuf>
- <complex>
- Реализует шаблон класса
std::complexи связанные функции для работы с комплексными числами. - <numeric>
- Реализует алгоритмы для числовой обработки
- <valarray>
- Реализует шаблон класса
std::valarray— класс массивов, оптимизированный для числовой обработки.
- <exception>
- Реализует несколько типов и функций, связанных с обработкой исключений, включая
std::exception— базовый класс всех перехватов исключений в Стандартной Библиотеке. - <limits>
- реализует шаблон класса
std::numeric_limits, используемый для описания свойств базовых числовых типов. - <new>
- Реализует операторы
newиdelete, а также другие функции и типы, составляющие основу управления памятью в C++. - <typeinfo>
- Реализует инструменты для работы с динамической идентификацией типа данных в C++.
Каждый заголовочный файл из стандартной библиотеки языка Си включен в стандартную библиотеку языка C++ под различными именами, созданными путём отсечения расширения .h и добавлением 'c' в начале, например, 'time.h' стал 'ctime'. Единственное отличие между этими заголовочными файлами и традиционными заголовочными файлами стандартной библиотеки языка Си заключается в том, что функции должны быть помещены в пространство имен std:: (хотя некоторые компиляторы сами делают это). В стандарте ISO C функции стандартной библиотеки разрешены для реализации макросами, которые не разрешены в ISO C++.
Литература
- Бьёрн Страуструп: Язык программирования C++, Addison-Wesley, ISBN 0-201-70073-5


