Стандартная библиотека C++
Стандартная библиотека C++ |
---|
Контейнеры |
Стандартная библиотека C |
на Стандартная библиотека C++ языке программирования C++ представляет собой набор классов и функций , написанных на базовом языке и являющихся частью самого стандарта C++ ISO . [ 1 ]
Обзор
[ редактировать ]Стандартная библиотека C++ предоставляет несколько универсальных контейнеров, функции для использования и управления этими контейнерами, функциональные объекты, универсальные строки и потоки (включая интерактивный и файловый ввод-вывод), поддержку некоторых возможностей языка и функции для общих задач, таких как поиск квадрата . корень числа. Стандартная библиотека C++ также включает большинство заголовков стандартной библиотеки ISO C, заканчивающихся на ".h", но их использование было объявлено устаревшим (устаревание отменено с C++23). [ 2 ] ). [ 3 ] Вместо этого C++23 считает эти заголовки полезными для взаимодействия с C и рекомендует не использовать их за пределами программ, которые должны быть допустимыми программами как на C, так и на C++. Никакие другие заголовки в стандартной библиотеке C++ не заканчиваются на «.h». Возможности стандартной библиотеки C++ объявлены в разделе std
пространство имен .
Стандартная библиотека C++ основана на соглашениях, введенных Стандартной библиотекой шаблонов (STL), и на нее повлияли исследования в области общего программирования и разработчики STL, такие как Александр Степанов и Мэн Ли. [ 4 ] [ 5 ] Хотя Стандартная библиотека C++ и STL имеют много общего, ни одна из них не является строгим расширением другой. [ нужна ссылка ]
Примечательной особенностью стандартной библиотеки C++ является то, что она не только определяет синтаксис и семантику универсальных алгоритмов, но также предъявляет требования к их производительности. [ 6 ] Эти требования к производительности часто соответствуют известному алгоритму, использование которого ожидается, но не обязательно. В большинстве случаев для этого требуется линейное время O( n ) или линейное время O( n log n ), но в некоторых случаях допускаются более высокие границы, например квазилинейное время O( n log n ). 2 n ) для стабильной сортировки (чтобы разрешить на месте сортировку слиянием ). Раньше для сортировки требовалось только среднее значение O( n log n ), что позволяло использовать быструю сортировку , которая на практике быстра, но имела плохую производительность в наихудшем случае, но была введена интросортировка, чтобы обеспечить как быструю среднюю производительность, так и оптимальную наихудшую производительность. сложность регистра, а начиная с C++11 сортировка гарантированно будет в худшем случае линейной арифмической. В других случаях требования остаются более мягкими, например, выбор , который должен быть линейным только в среднем (как в быстром выборе ), [ 7 ] не требуется линейного наихудшего случая, как в introselect .
Стандартная библиотека C++ прошла стандартизацию ISO в рамках усилий по стандартизации C++ ISO в 1990-х годах. С 2011 года он расширяется и обновляется каждые три года. [ 8 ] с каждой редакцией стандарта C++.
Реализации
[ редактировать ]Имя | Организация | Домашняя страница | Акроним | Лицензия | Последний выпуск |
---|---|---|---|---|---|
Стандартная библиотека GNU C++ | Проект GNU и Фонд свободного программного обеспечения | [1] | libstdС++ | GPLv3 с исключением библиотеки времени выполнения GCC | Новый основной релиз раз в год |
Стандартная библиотека LLVM C++ | Группа разработчиков LLVM | [2] | библиотека libС++ | Лицензия Apache 2.0 с исключениями LLVM | Каждые 2 недели |
Стандартная библиотека NVIDIA C++ | Нвидиа | [3] | libcu++ | Лицензия Apache 2.0 с исключениями LLVM | 12 октября 2022 г |
Стандартная библиотека Microsoft C++ | Майкрософт | [4] | MSVC STL | Лицензия Apache 2.0 с исключениями LLVM | Ежедневно |
Стандартная библиотека HPX C++ для параллелизма и параллелизма | СТЕЛЛАР Групп | [5] | HPX | Лицензия на программное обеспечение Boost 1.0 | 6 августа 2022 г |
Библиотека стандартных шаблонов Electronic Arts | Электронное искусство | [6] | ИСТЛ | Лицензия BSD, 3 пункта | 20 октября 2021 г |
Библиотека Динкума C++ | Посуда | [7] | Неизвестный | Коммерческий | Неизвестный |
Стандартная библиотека Cray C++ | Группа пользователей Cray | [8] | Неизвестный | Коммерческий | Неизвестный |
Снято с производства
[ редактировать ]Стандартная библиотека Apache C++
[ редактировать ]Стандартная библиотека Apache C++ — еще одна реализация с открытым исходным кодом. Первоначально он был разработан на коммерческой основе компанией Rogue Wave Software , а затем передан в дар Apache Software Foundation . [ 9 ] Однако после более чем пяти лет отсутствия релиза правление Apache Software Foundation решило завершить этот проект и перенести его в Apache Attic. [ 10 ]
См. также
[ редактировать ]Следующие библиотеки реализуют большую часть стандартной библиотеки C++:
Имя | Домашняя страница | Описание |
---|---|---|
Спуск на веревке | [9] | Коллекция библиотек с открытым исходным кодом, используемая Google внутри компании. |
глупость | [10] | Разнообразие библиотек C++14 , которые широко используются Facebook. |
Библиотека поддержки Bareflank | [11] | Библиотека C++, в которой все может выполняться во время компиляции. |
Стандартные модули
[ редактировать ]С тех пор, как модули были представлены в C++20 не было поддержки модулей стандартной библиотеки , до C++23 . Эти именованные модули были добавлены для включения всех элементов, объявленных как в глобальном, так и в глобальном масштабе. std
пространства имен, предоставляемые импортируемыми стандартными заголовками. Макросы нельзя экспортировать, поэтому пользователям приходится вручную включать или импортировать заголовки, которые создают макросы для использования.
std
- Экспортирует все объявления в пространстве имен.
std
а также глобальные функции выделения и освобождения памяти, которые предоставляются импортируемыми заголовками библиотеки C++, включая возможности библиотеки C (хотя они объявлены в стандартном пространстве имен). std.compat
- Экспортирует те же объявления, что и именованный модуль.
std
и дополнительно экспортирует функции в глобальное пространство имен в средствах библиотеки C.
Стандартные заголовки
[ редактировать ]Следующие файлы содержат объявления стандартной библиотеки C++.
Общий
[ редактировать ]<any>
- Новое в C++17 . Предоставляет класс со стертым типом
std::any
. <atomic>
- Новое в C++11 . Предоставляет шаблон класса
std::atomic
, его несколько специализаций шаблонов и более атомарные операции. <chrono>
- Предоставляет элементы времени, такие как
std::chrono::duration
,std::chrono::time_point
и часы. Начиная с C++20 , было добавлено огромное количество темпоральных функций: календари, часовые пояса, дополнительные часы и форматирование строкового хроно. <concepts>
- Новое в C++20 . Предоставляет фундаментальные концепции библиотеки .
<expected>
- Новое в C++23 . Предоставляет шаблон класса
std::expected
, тип результата . <functional>
- Предоставляет несколько объектов-функций , предназначенных для использования со стандартными алгоритмами.
<generator>
- Новое в C++23 . Предоставляет генератор сопрограмм , который дополнительно поддерживает вложенные операции доходности в диапазонах.
<memory>
- Предоставляет средства управления памятью в C++, включая шаблон класса.
std::unique_ptr
. <memory_resource>
- Новое в C++17 . Предоставляет средства для создания полиморфных распределителей памяти, поведение которых может меняться во время выполнения. [ 11 ]
<optional>
- Новое в C++17 . Предоставляет шаблон класса
std::optional
, необязательный тип . <scoped_allocator>
- Новое в C++11 . Обеспечивает
std::scoped_allocator_adaptor
. <stacktrace>
- Новое в C++23 . Обеспечивает операции трассировки стека .
<stdexcept>
- Содержит стандартные классы исключений, такие как
std::logic_error
иstd::runtime_error
, оба произошли отstd::exception
. <system_error>
- Новое в C++11 . Определяет
std::error_code
<tuple>
- Новое в C++11 и TR1. Предоставляет шаблон класса
std::tuple
, кортеж . <type_traits>
- Новое в C++11 . Предоставляет средства метапрограммирования для работы с типами.
<utility>
- Предоставляет различные утилиты: шаблон класса
std::pair
(двухчленные кортежи ), целочисленные последовательности времени компиляции, помощники в построении типов словаря, такие функции, какstd::move
иstd::forward
и многие другие. Пространство именstd::rel_ops
для автоматического создания операторов сравнения устарел в C++20 в пользу новых операторов сравнения по умолчанию. <variant>
- Новое в C++17 . Предоставляет шаблон класса
std::variant
, тегированный тип объединения .
Языковая поддержка
[ редактировать ]<compare>
- Новое в C++20 . Обеспечивает поддержку оператора трехстороннего сравнения .
<coroutine>
- Новое в C++20 . Обеспечивает поддержку сопрограмм .
<exception>
- Предоставляет несколько типов и функций, связанных с обработкой исключений , в том числе
std::exception
, базовый класс всех исключений, создаваемых стандартной библиотекой. <initializer_list>
- Новое в C++11 . Обеспечивает поддержку списка инициализаторов.
<limits>
- Предоставляет шаблон класса
std::numeric_limits
, используемый для описания свойств фундаментальных числовых типов. <new>
- Предоставляет операторам
new
иdelete
и другие функции и типы, составляющие основы управления памятью C++ . <source_location>
- Новое в C++20 . Обеспечивает сбор информации о местоположении источника в качестве альтернативы предопределенным макросам, таким как
__LINE__
. <stdfloat>
- Новое в C++23 . Обеспечивает условную поддержку расширенных типов с плавающей запятой.
<typeinfo>
- Предоставляет средства для работы с информацией о типах времени выполнения C++ .
<version>
- Новое в C++20 . Предоставляет информацию о реализации стандартной библиотеки C++. [ 12 ]
Контейнеры
[ редактировать ]<array>
- Новое в C++11 и TR1 . Предоставляет шаблон класса контейнера.
std::array
, контейнер для массива фиксированного размера. <bitset>
- Предоставляет специализированный класс контейнера
std::bitset
, битовый массив . <deque>
- Предоставляет шаблон класса контейнера.
std::deque
, двусторонняя очередь . <flat_map>
- Новое в C++23 . Предоставляет шаблоны классов адаптеров контейнеров.
std::flat_map
иstd::flat_multimap
. <flat_set>
- Новое в C++23 . Предоставляет шаблоны классов адаптеров контейнеров.
std::flat_set
иstd::flat_multiset
. <forward_list>
- Новое в C++11 и TR1 . Предоставляет шаблон класса контейнера.
std::forward_list
, односвязный список . <list>
- Предоставляет шаблон класса контейнера.
std::list
, двусвязный список . <map>
- Предоставляет шаблоны классов контейнеров.
std::map
иstd::multimap
, сортированный ассоциативный массив и мультикарта . <mdspan>
- Новое в C++23 . Предоставляет шаблон класса
std::mdspan
, аналогstd::span
но взгляд многомерен. <queue>
- Предоставляет класс адаптера контейнера
std::queue
, односторонняя очередь иstd::priority_queue
, приоритетная очередь . <set>
- Предоставляет шаблоны классов контейнеров.
std::set
иstd::multiset
, отсортированные ассоциативные контейнеры или наборы . <span>
- Новое в C++20 . Предоставляет шаблон класса
std::span
, представление, не являющееся владельцем, которое ссылается на любой непрерывный диапазон. <stack>
- Предоставляет класс адаптера контейнера
std::stack
, стек . <unordered_map>
- Новое в C++11 и TR1 . Предоставляет шаблон класса контейнера.
std::unordered_map
иstd::unordered_multimap
, хеш-таблицы . <unordered_set>
- Новое в C++11 и TR1 . Предоставляет шаблон класса контейнера.
std::unordered_set
иstd::unordered_multiset
. <vector>
- Предоставляет шаблон класса контейнера.
std::vector
, динамический массив .
Итераторы и диапазоны
[ редактировать ]<algorithm>
- Содержит определения многих алгоритмов для использования с контейнерами и другими диапазонами.
<execution>
- Новое в C++17 . Предоставляет политики выполнения для распараллеленных алгоритмов.
<iterator>
- Предоставляет классы и шаблоны для работы с итераторами .
<numeric>
- Обобщенные числовые алгоритмы.
<ranges>
- Новое в C++20 . Предоставляет возможности диапазона и адаптеры для ленивой оценки.
Локализация
[ редактировать ]<codecvt>
- Предоставляет аспекты преобразования кода для различных кодировок символов. Этот заголовок устарел, начиная с C++17 .
<locale>
- Определяет классы и объявляет функции, которые инкапсулируют и манипулируют информацией, характерной для локали .
<text_encoding>
- Новое в C++26 . Обеспечивает идентификацию кодировки текста.
Струны
[ редактировать ]<charconv>
- Новое в C++17 . Предоставляет независимые от локали, не выделяющие и не выбрасывающие утилиты преобразования строк из/в целые числа и числа с плавающей запятой.
<format>
- Новое в C++20 . Предоставляет современный способ форматирования строк, включая
std::format
. <string>
- C++ . Предоставляет стандартные строковые классы и шаблоны
<string_view>
- Новое в C++17 . Предоставляет шаблон класса
std::basic_string_view
, неизменяемое представление, не являющееся владельцем, для любой строки. <regex>
- Новое в C++11 . Предоставляет утилиты для сопоставления строк с шаблоном с использованием регулярных выражений .
Потоки, файлы и ввод/вывод
[ редактировать ]<filesystem>
- Новое в C++17 . Предоставляет средства для операций с файловой системой и ее компонентами.
<fstream>
- Предоставляет возможности для файлового ввода и вывода. См . fstream .
<iomanip>
- Предоставляет средства для управления форматированием вывода, например базой, используемой при форматировании целых чисел, и точностью значений с плавающей запятой .
<ios>
- Предоставляет несколько типов и функций, основных для работы iostreams.
<iosfwd>
- Предоставляет предварительные объявления нескольких шаблонов классов, связанных с вводом-выводом.
<iostream>
- Предоставляет основы ввода и вывода C++. См . iostream .
<istream>
- Обеспечивает
std::istream
и другие вспомогательные классы для ввода. <ostream>
- Обеспечивает
std::ostream
и другие вспомогательные классы для вывода. <print>
- Новое в C++23 . Предоставляет утилиты форматированного вывода, такие как
std::print
поддерживается как для потоков C, так и для C++. <spanstream>
- Новое в C++23 . Обеспечивает
std::spanstream
и другие потоки ввода-вывода с фиксированным буфером символов. <sstream>
- Обеспечивает
std::stringstream
и другие вспомогательные классы для манипуляций со строками. <streambuf>
- Обеспечивает функции чтения и записи в/из определенных типов последовательностей символов, таких как внешние файлы или строки.
<syncstream>
- Новое в C++20 . Обеспечивает
std::osyncstream
и другие классы поддержки синхронизированных выходных потоков.
Библиотека поддержки потоков
[ редактировать ]<barrier>
- Новое в C++20 . Обеспечивает
std::barrier
, многоразовый барьер для нитей. <condition_variable>
- Новое в C++11 . В 32.6-1 переменные условия предоставляют примитивы синхронизации, используемые для блокировки потока до тех пор, пока какой-либо другой поток не уведомит о выполнении некоторого условия или пока не будет достигнуто системное время.
<future>
- Новое в C++11 . В разделе 32.9.1-1 в этом разделе описываются компоненты, которые программа C++ может использовать для получения в одном потоке результата (значения или исключения) из функции, которая выполнялась в том же потоке или другом потоке.
<hazard_pointer>
- Новое в C++26 . Обеспечивает
std::hazard_pointer
. <latch>
- Новое в C++20 . Обеспечивает
std::latch
, одноразовый барьер для резьбы. <mutex>
- Новое в C++11 . В 32.5-1 в этом разделе представлены механизмы взаимного исключения: мьютексы, блокировки и однократный вызов.
<rcu>
- Новое в C++26 . Предоставляет механизмы чтения-копирования-обновления .
<shared_mutex>
- Новое в C++14 . Предоставляет возможность совместного взаимного исключения.
<semaphore>
- Новое в C++20 . Предоставляет семафор , моделирующий неотрицательное количество ресурсов.
<stop_token>
- Новое в C++20 . В 32.3.1-1 в этом разделе описываются компоненты, которые можно использовать для асинхронного запроса на своевременную остановку выполнения операции, обычно потому, что результат больше не требуется. Такой запрос называется стоп-запросом.
<thread>
- Новое в C++11 . Предоставьте класс и пространство имен для работы с потоками.
Библиотека чисел
[ редактировать ]Компоненты, которые программы C++ могут использовать для выполнения получисловых операций.
<bit>
- Новое в C++20 . Предоставляет возможность манипулирования битами.
<complex>
- Определяет шаблон класса
std::complex
и многочисленные функции для представления и управления комплексными числами. <numbers>
- Новое в C++20 . Предоставляет математические константы, определенные в пространстве имен.
std::numbers
. <random>
- Новое в C++11 . Средство генерации (псевдо-)случайных чисел и распределений.
<ratio>
- Новое в C++11 . Предоставляет рациональную арифметику во время компиляции на основе шаблонов классов.
<valarray>
- Определяет пять шаблонов классов (
std::valarray
,std::slice_array
,std::gslice_array
,std::mask_array
, иstd::indirect_array
), два класса (std::slice
иstd::gslice
) и ряд связанных шаблонов функций для представления массивов значений и управления ими.
Стандартная библиотека C
[ редактировать ]Каждый заголовок из стандартной библиотеки C включен в стандартную библиотеку C++ под другим именем, созданным путем удаления .h и добавления буквы «c» в начале; например, «time.h» становится «ctime». Единственное различие между этими заголовками и традиционными заголовками стандартной библиотеки C заключается в том, что, где это возможно, функции следует размещать в std::
пространство имен. В ISO C функции стандартной библиотеки могут быть реализованы с помощью макросов , что не разрешено ISO C++.
См. также
[ редактировать ]- Boost (библиотеки C++)
- POSIX-библиотека C.
- Стандартная библиотека C
- Стандартная библиотека
- Технический отчет C++ 1
Ссылки
[ редактировать ]- ^ ISO/IEC 14882:2003(E) Языки программирования – C++ §17-27
- ^ Томас Кеппе (11 июня 2021 г.). «Уточнение статуса заголовков «С» » .
- ^ ISO/IEC 14882:2003(E) Языки программирования – C++ §D.5
- ^ Бьерн Страуструп (1994). Проектирование и эволюция C++ §8.5 . Эддисон Уэсли. ISBN 0-201-54330-3 .
- ^ Александр Степанов, Мэн Ли (1 августа 1994 г.). «Библиотека стандартных шаблонов» . Лаборатории HP . Проверено 22 октября 2017 г.
- ^ « Общие алгоритмы », Дэвид Массер
- ^ "std::nth_element" . cppreference.com . Проверено 20 марта 2018 г.
- ^ « Расписание C++ IS », Херб Саттер
- ^ Стандартная библиотека Apache C++
- ^ Бретт Портер (18 июля 2013 г.). «Стандартная библиотека Apache C++ и чердак» . список рассылки stdcxx-dev . Проверено 27 февраля 2014 г.
- ^ Филипек, Бартломей. «Полиморфные распределители, рост и взлом std::vector» . Проверено 30 апреля 2021 г.
- ^ «Рабочий проект стандарта языка программирования C++» (PDF) . open-std.org . ИСО/МЭК. 1 апреля 2020 г. с. 492. Архивировано (PDF) из оригинала 27 апреля 2020 г. . Проверено 30 апреля 2021 г.
Дальнейшее чтение
[ редактировать ]- Страуструп, Бьярне (2013). Язык программирования C++ . Аддисон-Уэсли . ISBN 978-0321563842 .
- Джосуттис, Николай (2012). Стандартная библиотека C++ — учебное пособие и справочник . Аддисон-Уэсли . ISBN 978-0-321-62321-8 .
- Ван Верт, Питер; Грегуар, Марк (14 июня 2016 г.). Краткий справочник стандартной библиотеки C++ . Апресс . ISBN 978-1484218754 . Архивировано из оригинала 16 мая 2021 года . Проверено 24 марта 2017 г.
Внешние ссылки
[ редактировать ]- Справочник по стандартной библиотеке C++
- Справочник по стандартной библиотеке Microsoft C++
- Документация Rogue Wave SourcePro C++
- Wiki стандартной библиотеки Apache C++ , прекращена 15 мая 2014 г. (на основе стандартной библиотеки Rogue Wave C++ 4.1.0)
- Документация стандартной библиотеки STLport C++
- Онлайн-документация библиотеки GNU C++.
- Документация по стандартной библиотеке LLVM/Clang C++