...

Stl c что это за программа

Справочник по стандартной библиотеке C++ (STL)

Программа на языке C++ может вызывать множество функций из этой реализации стандартной библиотеки C++. Эти функции выполняют такие службы, как входные и выходные данные, и обеспечивают эффективные реализации часто используемых операций.

Дополнительные сведения о связывании с соответствующим файлом среды выполнения .lib Visual C++ см. в разделах C Runtime (CRT) и C++ Standard Library (STL). .lib

Реализацию стандартной библиотеки C++ корпорации Майкрософт часто называют STL или стандартной библиотекой шаблонов. Хотя стандартная библиотека C++ является официальным названием библиотеки, как определено в ISO 14882, из-за популярного использования «STL» и «стандартной библиотеки шаблонов» в поисковых системах, мы иногда используем эти имена, чтобы упростить поиск нашей документации.

С исторической точки зрения , «STL» первоначально относится к стандартной библиотеке шаблонов, написанной Александром Степановым. Части этой библиотеки были стандартизированы в стандартной библиотеке C++, а также библиотеке среды выполнения ISO C, части библиотеки Boost и других функциональных возможностях. Иногда «STL» используется для ссылки на контейнеры и алгоритмы стандартной библиотеки C++, адаптированные на основе STL Стефанова. В этой документации стандартная библиотека шаблонов (STL) относится к стандартной библиотеке C++ в целом.

В этом разделе

Обзор стандартной библиотеки C++ Общие сведения о реализации стандартной библиотеки C++ корпорации Майкрософт.

iostream программирование Предоставляет общие сведения о программировании iostream .

Справочник по файлам заголовков Ссылки на справочные статьи о файлах заголовков стандартной библиотеки C++ с примерами кода.

Обзор стандартной библиотеки C++ (STL)

Все сущности библиотеки C++ объявляются или определяются в одном или нескольких стандартных заголовках. Эта реализация включает два других заголовка, и , которые не требуются стандартом C++. Полный список заголовков, поддерживаемых этой реализацией, см. в справочнике по файлам заголовков.

Стандарт C++ определяет два типа соответствующих библиотек:

  • Размещенная реализация, которая поддерживает все необходимые заголовки стандартной библиотеки, описанные в стандарте ISO C++.
  • Автономная реализация, для которой требуется только подмножество заголовков стандартной библиотеки. Необходимое подмножество:

Следующие заголовки являются устаревшими после C++11: , и .

Ниже перечислены другие различия между автономной и размещенной реализацией.

  • Для размещенных реализаций требуется глобальная функция с именем main . Автономная реализация может определять собственные функции запуска и завершения.
  • Размещенные реализации должны поддерживать несколько потоков, работающих одновременно. Разработчики автономных реализаций решают, поддерживает ли их библиотека параллельные потоки.

Стандартная библиотека Microsoft C++ удовлетворяет как требованиям к автономной среде, так и к размещению.

Заголовки библиотек C++ имеют два широких подраздела:

  • соглашения iostreams.
  • Справочные соглашения о стандартной библиотеке C++ (STL).

Этот раздел содержит следующие разделы:

  • Использование заголовков библиотеки C++
  • Соглашения о библиотеках C++
  • Соглашения iostreams
  • Запуск и завершение программ C++
  • Безопасные библиотеки: стандартная библиотека C++
  • Проверяемые итераторы
  • Поддержка итераторов при отладке
  • Справочник по стандартной библиотеке C++ (STL)
  • Потокобезопасность в стандартной библиотеке C++
  • Пространство имен stdext
  • Регулярные выражения (C++)

Дополнительные сведения о библиотеках времени выполнения Visual C++ см. в разделе Функции библиотеки CRT.

Реализация стандартной библиотеки C++ корпорацией Майкрософт часто называется STL или стандартной библиотекой шаблонов. Хотя стандартная библиотека C++ является официальным названием библиотеки, как определено в ISO 14882, из-за популярного использования «STL» и «Стандартной библиотеки шаблонов» в поисковых системах, мы иногда используем эти имена, чтобы упростить поиск нашей документации. С исторической точки зрения , «STL» первоначально относится к стандартной библиотеке шаблонов, написанной Александром Степановым. Части этой библиотеки были стандартизированы в стандартной библиотеке C++, наряду с библиотекой времени выполнения ISO C, частями библиотеки Boost и другими функциями. Иногда «STL» также используется для обозначения контейнеров и алгоритмов стандартной библиотеки C++, адаптированных из STL Степанова. В этой документации стандартная библиотека шаблонов (STL) относится к стандартной библиотеке C++ в целом.

Основные понятия стандартной библиотеки С++

Данная статья определяет основные понятия стандартной библиотеки С++. Она приводится для того чтобы на неё ссылаться в дальнейшем.

Наибольшей частью стандартной библиотеки С++ является библиотека STL (Standard Template Library – Стандартная Библиотека Шаблонов). Библиотека STL содержит пять основных видов компонентов:

  • контейнер (container): управляет набором объектов в памяти.
  • итератор (iterator): обеспечивает для алгоритма средство доступа к содержимому контейнера.
  • алгоритм (algorithm): определяет вычислительную процедуру.
  • функциональный объект (function object): инкапсулирует функцию в объекте для использования другими компонентами.
  • адаптер (adaptor): адаптирует компонент для обеспечения различного интерфейса.

Все компоненты удовлетворяют ряду требований, поэтому хорошо согласуются друг с другом.

Из определения контейнера следует, что любая пользовательская структура данных является контейнером. В нашем случае контейнеры есть стандартные структуры данных, такие как список (list), вектор (vector), словарь (map) и многие другие. Формальные требования к контейнерам довольно обширны, но основным является правило доступа к элементам. Доступ к элементам контейнера осуществляется через специальные объекты — итераторы (см. ниже). Вы можете не знать, как располагаются элементы контейнера в памяти, однако вы точно знаете, что итераторы можно перебрать последовательно, и каждый из них предоставит доступ к элементу. Итератор, указывающий на первый элемент, можно получить при помощи метода iterator begin(); контейнера. Итератор, указывающий за последний элемент, можно получить при помощи метода iterator end(); контейнера. Другими словами, итераторы располагаются в полуинтервале (или полуотрезке), что можно формально записать как [begin, end). Пример объявления контейнера:

struct a_container < struct an_iterator; an_iterator begin(); an_iterator end(); >;

В ожидаемом стандарте С++20 предложено использовать структуру, инкапсулирующую полуинтервалы — ranges

Итератор — объект, предоставляющий доступ к элементам контейнера и позволяющий их перебирать. Итератор является свойством контейнера. В первых реализациях стандартной библиотеки С++ итератор реализовывался как указатель на элемент контейнера. В современных реализациях это класс, инкапсулирующий указатель на объект контейнера.

Основные требования к итераторам — наличие операторов разыменования и инкремента. Ниже объявление контейнера с итератором.

template struct a_container < struct an_iterator < void operator++(); TYPE& operator*(); >; an_iterator begin(); an_iterator end(); >;

Я не могу дать лучшего определения алгоритма чем стандартное: алгоритмом называется последовательность действий, приводящая за конечное число шагов к необходимому результату.

В случае STL, алгоритмы реализуются шаблонными функциями, которые в качестве входных параметров принимают полуинтервалы итераторов. Общая сигнатура данных алгоритмов описывается следующим образом:

template RESULT an_algorithm(ITERATOR first, ITERATOR last, . );

В объявлении класса можно переопределить оператор (). Если этот оператор в классе переопределен, то объекты этого класса получают свойства функций (их можно использовать как функции). Такие объекты называются функциональными или функторами. Функторы удобно использовать, когда функция должна обладать «памятью», а также, как замена указателей на функции.

Начиная со стандарта С++11 существует возможность краткой записи функторов — лямбда-функции.

Каких-либо специальных требований к функторам нет. Разве что иногда может требоваться наследование от функтора function (до стандарта С++11 — unary_function или binary_function). Небольшой пример реализации функтора:

template struct plus < TYPE operator ()(const TYPE& p1, const TYPE& p2) const< return p1 + p2; >>;

Также STL предлагает ряд классов и функций (фукнторов), которые преобразуют интерфейс к нужному. В частности, есть адаптер stack, который на основе контейнеров реализует, соответственно, стэк. В качестве примера можно рассмотреть адаптер бинарной функции к унарной (на данный момент эта функция объявлена в стандарте С++ устаревшей):

template class bind1st < BIDIRECTIONAL_FUNCTION _bf; TYPE _first; public: bind1st(BIDIRECTIONAL_FUNCTION bf, TYPE first): _bf(bf), _first(first) <>TYPE operator()(const TYPE& p) const < return _bf(_first, p); >>;

Для самостоятельного чтения

  1. Драфт стандарта С++20 на гитхабе
  2. C++ Reference
  3. Разработка приложений на С++
  4. Range-v3, предложение для стандарта

При подготовке материала использовались источники:
https://learn.microsoft.com/ru-ru/cpp/standard-library/cpp-standard-library-reference?view=msvc-170
https://learn.microsoft.com/ru-ru/cpp/standard-library/cpp-standard-library-overview?view=msvc-170
https://habr.com/ru/articles/434986/

Оцените статью