stringtranslate.com

Стандартная библиотека 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 2 n ) для устойчивой сортировки (чтобы разрешить сортировку слиянием на месте ). Ранее сортировка требовала только O( n log n ) в среднем, что позволяло использовать быструю сортировку , которая быстра на практике, но имеет плохую производительность в худшем случае, но была введена introsort, чтобы обеспечить как быструю среднюю производительность, так и оптимальную сложность в худшем случае, и с C++11 сортировка гарантированно будет в худшем случае линейно-арифметической. В других случаях требования остаются более мягкими, например, для выбора , который должен быть линейным только в среднем (как в quickselect ), [7] не требуя линейности в худшем случае, как в introselect .

Стандартная библиотека C++ прошла стандартизацию ISO в рамках усилий по стандартизации C++ ISO в 1990-х годах. С 2011 года она расширялась и обновлялась каждые три года [8] с каждой редакцией стандарта C++.

Реализации

Прекращено

Стандартная библиотека Apache C++

Apache C++ Standard Library — еще одна реализация с открытым исходным кодом. Первоначально она была разработана в коммерческих целях компанией Rogue Wave Software , а затем передана в дар Apache Software Foundation . [9] Однако после более чем пяти лет без релиза совет Apache Software Foundation решил закрыть этот проект и перенести его в Apache Attic. [10]

Смотрите также

Следующие библиотеки реализуют большую часть стандартной библиотеки 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 . Предоставляет генератор сопрограмм , который дополнительно поддерживает вложенные операции yield в диапазонах.
<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 двух членов ), целочисленные последовательности времени компиляции, помощники в построении типов словаря, такие функции, как и и многое другое. Пространство имен для автоматической генерации операторов сравнения устарело в C++20 в пользу новых операторов сравнения по умолчанию.std::movestd::forwardstd::rel_ops
<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также отсортированный ассоциативный массив и 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++.

Смотрите также

Ссылки

  1. ^ ISO/IEC 14882:2003(E) Языки программирования – C++ §17-27
  2. ^ Томас Кёппе (11 июня 2021 г.). «Уточнение статуса «заголовков C»».
  3. ^ ISO/IEC 14882:2003(E) Языки программирования – C++ §D.5
  4. ^ Бьярне Страуструп (1994). Проектирование и эволюция C++ §8.5 . Эддисон Уэсли. ISBN 0-201-54330-3.
  5. ^ Александр Степанов, Мэн Ли (1 августа 1994 г.). "The Standard Template Library". HP Labs . Получено 22 октября 2017 г.
  6. ^ «Универсальные алгоритмы», Дэвид Массер
  7. ^ "std::nth_element". cppreference.com . Получено 20 марта 2018 г. .
  8. ^ "C++ IS Schedule", Херб Саттер
  9. ^ Стандартная библиотека Apache C++
  10. Бретт Портер (18 июля 2013 г.). «Стандартная библиотека Apache C++ и чердак». Список рассылки stdcxx-dev . Получено 27 февраля 2014 г.
  11. ^ Филипек, Бартломей. "Полиморфные распределители, рост и взлом std::vector" . Получено 30 апреля 2021 г.
  12. ^ "Рабочий проект, стандарт языка программирования C++" (PDF) . open-std.org . ISO/IEC. 1 апреля 2020 г. стр. 492. Архивировано (PDF) из оригинала 27 апреля 2020 г. . Получено 30 апреля 2021 г. .

Дальнейшее чтение

Внешние ссылки