Jump to content

Стандартная библиотека 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 г .; 22 месяца назад ( 12.10.2022 )
Стандартная библиотека Microsoft C++ Майкрософт [4] MSVC STL Лицензия Apache 2.0 с исключениями LLVM Ежедневно
Стандартная библиотека HPX C++ для параллелизма и параллелизма СТЕЛЛАР Групп [5] HPX Лицензия на программное обеспечение Boost 1.0 6 августа 2022 г .; 2 года назад ( 06.08.2022 )
Библиотека стандартных шаблонов Electronic Arts Электронное искусство [6] ИСТЛ Лицензия BSD, 3 пункта 20 октября 2021 г .; 2 года назад ( 20.10.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++.

См. также

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

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

[ редактировать ]
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 154182965f649edec2fcd26eef7a111f__1704505140
URL1:https://arc.ask3.ru/arc/aa/15/1f/154182965f649edec2fcd26eef7a111f.html
Заголовок, (Title) документа по адресу, URL1:
C++ Standard Library - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)