Стандартная библиотека шаблонов (STL) в C++ — это набор классов шаблонов, предоставляющих такие структуры данных, как массивы, векторы и т.д. STL — это библиотека, состоящая из контейнеров, алгоритмов и итераторов.
Поскольку STL состоит из набора классов шаблонов, значит это обобщенная библиотека, независимая от типов данных.
Компоненты STL
STL в основном состоит из следующих компонентов:
1) Контейнеры
Контейнер — это набор объектов определенного типа структуры данных. В STL есть различные типы классов контейнеров, такие как массив, вектор, список, карта, набор и т. д. Эти контейнеры универсальны по своей природе и реализованы как шаблоны классов.
Контейнеры являются динамическими по своей природе и могут использоваться для хранения различных типов объектов.
2) Алгоритмы
Алгоритмы — это методы или функции, которые воздействуют на контейнеры. Используя алгоритмы, предоставляемые STL, мы можем использовать методы для поиска, сортировки, изменения, преобразования или инициализации содержимого объектов класса контейнера.
Алгоритмы, предоставляемые STL, имеют встроенные функции, которые могут напрямую работать со сложной структурой данных, и их не нужно нам самим писать.
Например, функция reverse() в STL может использоваться для обращения связанного списка.
3) Итераторы
Итераторы — очень важная и отличительная черта STL. Итераторы — это конструкции, которые используются для обхода объектов-контейнеров. Подобно индексам, которые мы используем для пошагового просмотра массивов, итераторы воздействуют на объекты классов-контейнеров и могут использоваться для пошагового просмотра данных.
Контейнеры
Контейнеры хранят объекты и данные. В основном это общие классы на основе шаблонов.
Контейнеры в STL делятся на следующие типы:
1) Последовательные контейнеры
Контейнеры, доступ к которым можно получить последовательным или линейным образом, называются последовательными контейнерами.
Массивы, векторы, списки — это контейнеры STL, которые хранят данные линейно и могут быть доступны последовательным образом.
2) Ассоциативные контейнеры
Ассоциативные контейнеры — это контейнеры, реализующие отсортированные структуры данных. Эти контейнеры для быстрого поиска. Некоторыми примерами ассоциативных контейнеров являются Map, Set, MultiMap, Multiset и т.д. Эти контейнеры обычно реализуются в виде пары ключ/значение.
3) Контейнеры-адаптеры
Контейнеры-адаптеры — это последовательные контейнеры, однако они реализуются с помощью другого интерфейса. Таким образом, контейнеры, такие как queue, deque, stack и priority_queue, классифицируются как приемщики контейнеров.
Итераторы
Итераторы — это конструкции, которые мы будем использовать для обхода или перехода через контейнеры в STL. Итераторы очень важны в STL, поскольку они действуют как мост между алгоритмами и контейнерами. Итераторы всегда указывают на контейнеры, и на самом деле алгоритмы работают с итераторами, а не непосредственно с контейнерами.
Итераторы бывают следующих типов:
- Итераторы ввода: они самые простые и используются в основном в однопроходных алгоритмах.
- Итераторы вывода: такие же, как итераторы ввода, но не используются для обхода.
- Двунаправленные итераторы: эти итераторы могут двигаться в обоих направлениях.
- Однонаправленные итераторы: могут использоваться только в прямом направлении, по одному шагу за раз.
- Итераторы произвольного доступа: может использоваться для случайного доступа к любому элементу.
Алгоритмы
Алгоритмы — это набор функций или методов, предоставляемых STL, которые воздействуют на контейнеры. Это встроенные функции, и их можно использовать напрямую с контейнерами и итераторами STL вместо написания собственных алгоритмов.
STL поддерживает следующие типы алгоритмов:
- Алгоритмы поиска
- Алгоритмы сортировки
- Изменение алгоритмов или управление ими
- Немодифицирующие алгоритмы
- Численные алгоритмы
- Алгоритмы мин/макс
Как предполагает каждый из типов алгоритмов, эти алгоритмы можно использовать для достижения различных функций в контейнерах STL, таких как поиск, сортировка, преобразование данных в контейнерах, поиск минимального/максимального значения и т. д.
Итог
Данная статья — это краткое введение в стандартную библиотеку шаблонов. В нашей следующей статье мы расскажем об основных понятиях: Strings (строки), Pair (пары) и Tuples (кортежи) в STL.
С Уважением, МониторБанк