Стандартная библиотека C ++ - C++ Standard Library
Стандартная библиотека C ++ |
---|
Контейнеры |
Стандартная библиотека C |
в C ++ язык программирования, Стандартная библиотека C ++ это собрание классы и функции, которые записаны в основной язык и часть C ++ ISO Сам стандарт.[1]
Обзор
Стандартная библиотека C ++ предоставляет несколько общих контейнеров, функции для использования и управления этими контейнерами, функциональные объекты, общие строки и потоки (включая интерактивный и файловый ввод-вывод), поддержку некоторых языковых функций и функции для повседневных задач, таких как поиск квадратный корень числа. Стандартная библиотека C ++ также включает в себя большинство заголовков ISO Стандартная библиотека C оканчиваются на «.h», но их использование не рекомендуется.[2] Никакие другие заголовки в стандартной библиотеке C ++ не заканчиваются на «.h». Возможности стандартной библиотеки C ++ объявлены в стандартное
пространство имен.
Стандартная библиотека C ++ основана на соглашениях, введенных Стандартная библиотека шаблонов (STL), и на него повлияли исследования в общее программирование и разработчики STL, такие как Александр Степанов и Мэн Ли.[3][4] Хотя стандартная библиотека C ++ и STL имеют много общих функций, ни одна из них не является строгим надмножеством другой.[нужна цитата ]
Примечательной особенностью стандартной библиотеки C ++ является то, что она не только определяет синтаксис и семантику общих алгоритмов, но также предъявляет требования к их производительности.[5] Эти требования к производительности часто соответствуют хорошо известному алгоритму, который ожидается, но не требуется. В большинстве случаев для этого требуется линейное время O (п) или линейное время O (п журнал п), но в некоторых случаях разрешены и более высокие оценки, например квазилинейное время O (п журнал2 п) для стабильной сортировки (чтобы сортировка слиянием на месте ). Раньше для сортировки требовалось только O (п журнал п) в среднем, что позволяет использовать быстрая сортировка, который на практике быстр, но имеет низкую производительность в худшем случае, но интросорт был введен, чтобы обеспечить как высокую среднюю производительность, так и оптимальную сложность наихудшего случая, а с C ++ 11, сортировка гарантированно будет в худшем случае линейной. В других случаях требования остаются более слабыми, например: отбор, который должен быть только в среднем линейным (как в быстрый выбор ),[6] не требует линейного наихудшего случая, как в интроселект.
Стандартная библиотека C ++ прошла стандартизацию ISO в рамках усилий по стандартизации C ++ ISO, и в настоящее время ведется дальнейшая работа.[7] относительно стандартизации расширенного функционала.
Реализации
Стандартная библиотека Microsoft C ++ (STL)
В CppCon 2019 16 сентября 2019 г., Microsoft объявили о выпуске своей реализации стандартной библиотеки C ++ (также известной как STL) как Открытый исходный код.[8] Он размещен на GitHub и под лицензией Лицензия Apache 2.0 с участием LLVM Исключение.[9][10]
Стандартная библиотека Apache C ++
В Стандартная библиотека Apache C ++ это еще одна реализация с открытым исходным кодом. Первоначально он был коммерчески разработан Программное обеспечение Rogue Wave а позже пожертвовал Фонд программного обеспечения Apache.[11] Однако, после более чем пяти лет отсутствия выпуска, правление Apache Software Foundation решило завершить этот проект и перенести его на Чердак Apache.[12]
Стандартные заголовки
Следующие файлы содержат объявления стандартной библиотеки C ++.
Контейнеры
- <array>
- Новое в C ++ 11 и TR1. Предоставляет шаблон класса контейнера
std :: array
, контейнер для массива фиксированного размера. - <bitset>
- Предоставляет специализированный контейнерный класс
std :: bitset
, а битовый массив. - <deque>
- Предоставляет шаблон класса контейнера
std :: deque
, а двусторонняя очередь. - <forward_list>
- Новое в C ++ 11 и TR1. Предоставляет шаблон класса контейнера
std :: forward_list
, а односвязный список. - <list>
- Предоставляет шаблон класса контейнера
std :: list
, а двусвязный список. - <map>
- Предоставляет шаблоны классов контейнера
std :: map
иstd :: multimap
, отсортировано ассоциативный массив и Multimap. - <queue>
- Предоставляет класс адаптера контейнера
std :: queue
, односторонний очередь, иstd :: priority_queue
, а приоритетная очередь. - <set>
- Предоставляет шаблоны классов контейнера
std :: set
иstd :: multiset
, отсортированные ассоциативные контейнеры или наборы. - <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>
- Предоставляет определения многих контейнеров алгоритмы.
- <chrono>
- Предоставляет элементы времени, такие как
std :: chrono :: duration
,std :: chrono :: time_point
, и часы.
- <functional>
- Предоставляет несколько функциональные объекты, предназначенный для использования со стандартными алгоритмами.
- <iterator>
- Предоставляет классы и шаблоны для работы с итераторы.
- <memory>
- Предоставляет возможности для управление памятью в C ++, включая шаблон класса
std :: unique_ptr
. - <stdexcept>
- Содержит стандартные классы исключений, такие как
std :: logic_error
иstd :: runtime_error
, оба получены изstd :: exception
. - <tuple>
- Новое в C ++ 11 и TR1. Предоставляет шаблон класса
std :: tuple
, а кортеж. - <utility>
- Предоставляет шаблонный класс
std :: pair
, для работы с парами объектов (двухчленные кортежи ), а пространство именstd :: rel_ops
, для упрощения перегрузки оператора.
Локализация
- <locale>
- Определяет классы и объявляет функции, которые инкапсулируют и обрабатывают информацию, специфичную для локаль.
- <codecvt>
- Предоставляет аспекты преобразования кода для различных кодировок символов.
Струны
- <string>
- Предоставляет стандарт C ++ строка классы и шаблоны.
- <regex>
- Новое в C ++ 11. Предоставляет утилиты для сопоставления строк с образцом, используя обычные выражения.
Потоки и ввод / вывод
- <fstream>
- Предоставляет средства для ввода и вывода на основе файлов. Увидеть fstream.
- <iomanip>
- Предоставляет средства для управления форматированием вывода, такие как база используется при форматировании целых чисел и точность из плавающая точка ценности.
- <ios>
- Предоставляет несколько типов и функций, основных для работы iostreams.
- <iosfwd>
- Обеспечивает предварительные объявления нескольких шаблонов классов, связанных с вводом-выводом.
- <iostream>
- Предоставляет основы ввода и вывода C ++. Увидеть iostream.
- <istream>
- Предоставляет шаблонный класс
std :: istream
и другие вспомогательные классы для ввода. - <ostream>
- Предоставляет шаблонный класс
std :: ostream
и другие вспомогательные классы для вывода. - <sstream>
- Предоставляет шаблонный класс
std :: stringstream
и другие вспомогательные классы для работы со строками. - <streambuf>
- Предоставляет функции чтения и записи в / из определенных типов последовательностей символов, таких как внешние файлы или строки.
Языковая поддержка
- <exception>
- Предоставляет несколько типов и функций, связанных с Обработка исключений, в том числе
std :: exception
, базовый класс всех исключений, создаваемых стандартной библиотекой. - <limits>
- Предоставляет шаблонный класс
std :: numeric_limits
, используется для описания свойств основных числовых типов. - <new>
- Предоставляет операторов
новый
иУдалить
и другие функции и типы, составляющие основы C ++ управление памятью. - <typeinfo>
- Предоставляет возможности для работы с C ++ информация о типе времени выполнения.
Библиотека поддержки потоков
- <thread>
- Новое в C ++ 11. Предоставьте класс и пространство имен для работы с потоками.
- <mutex>
- Новое в C ++ 11. 30.4-1. В этом разделе представлены механизмы взаимного исключения: мьютексы, блокировки и однократный вызов.
- <condition_variable>
- Новое в C ++ 11. 30,5-1. Переменные условия предоставляют примитивы синхронизации, используемые для блокировки потока до тех пор, пока какой-либо другой поток не получит уведомление о том, что какое-либо условие выполнено, или пока не будет достигнуто системное время.
- <future>
- Новое в C ++ 11. 30.6.1-1. Описывает компоненты, которые программа на C ++ может использовать для получения в одном потоке результата (значения или исключения) от функции, которая выполнялась в том же или другом потоке.
Библиотека чисел
Компоненты, которые программы C ++ могут использовать для выполнения полуцифровых операций.
- <complex>
- Заголовок
определяет шаблон класса и многочисленные функции для представления и управления комплексными числами. - <random>
- Возможность генерации (псевдо) случайных чисел
- <valarray>
- Определяет пять шаблонов классов (valarray, slice_array, gslice_array, mask_array и Indirect_array), два класса (slice и gslice) и ряд связанных шаблонов функций для представления массивов значений и управления ими.
- <numeric>
- Обобщенные числовые операции.
Стандартная библиотека C
Каждый заголовок из стандартной библиотеки C включен в стандартную библиотеку C ++ под другим именем, созданным путем удаления .h и добавления буквы «c» в начале; например, "time.h" становится "ctime". Единственное различие между этими заголовками и традиционными заголовками стандартной библиотеки C состоит в том, что там, где это возможно, функции должны быть помещены в пространство имен std ::. В ISO C функции стандартной библиотеки могут быть реализованы с помощью макросы, что не разрешено ISO C ++.
Смотрите также
- Стандартная библиотека Apache C ++
- Boost (библиотеки C ++)
- Библиотека C POSIX
- Стандартная библиотека C
- Стандартная библиотека
- Технический отчет C ++ 1
использованная литература
- ^ ИСО / МЭК 14882: 2003 (E) Языки программирования - C ++ §17-27
- ^ ИСО / МЭК 14882: 2003 (E) Языки программирования - C ++ §D.5
- ^ Бьярне Страуструп. Дизайн и развитие C ++ §8.5. Эддисон Уэсли. ISBN 0-201-54330-3.
- ^ Александр Степанов, Мэн Ли (1 августа 1994 г.). «Стандартная библиотека шаблонов». Лаборатория HP. Получено 22 октября 2017.
- ^ "Общие алгоритмы ", Дэвид Массер
- ^ "std :: nth_element". cppreference.com. Получено 20 марта 2018.
- ^ "JTC1 / SC22 / WG21 - Комитет по стандартам C ++". ISO / IEC. Получено 7 июля 2009.
- ^ https://devblogs.microsoft.com/cppblog/open-sourcing-msvcs-stl/
- ^ https://github.com/microsoft/STL
- ^ https://github.com/microsoft/STL/blob/master/LICENSE.txt
- ^ Стандартная библиотека Apache C ++
- ^ Бретт Портер (18 июля 2013 г.). «Стандартная библиотека Apache C ++ и чердак». список рассылки stdcxx-dev. Получено 27 февраля 2014.
дальнейшее чтение
- Страуструп, Бьярн. Язык программирования C ++. Эддисон-Уэсли. ISBN 978-0321563842.
- Йосуттис, Николай. Стандартная библиотека C ++ - Учебное пособие и справочник. Эддисон-Уэсли. ISBN 978-0-321-62321-8.
- Ван Верт, Питер; Грегуар, Марк. Краткий справочник по стандартной библиотеке C ++. Apress. ISBN 978-1484218754.
внешние ссылки
- Справочник по стандартной библиотеке C ++
- Справочник по стандартной библиотеке Microsoft C ++
- Документация Rogue Wave SourcePro C ++
- Вики по стандартной библиотеке Apache C ++, на пенсии 15 мая 2014 г. (на основе стандартной библиотеки Rogue Wave C ++ 4.1.0)
- Документация по стандартной библиотеке STLport C ++
- Электронная документация библиотеки GNU C ++
- Документация по стандартной библиотеке LLVM / Clang C ++