Перейти к основному содержимому

1. Основные определения STL

Библиотека стандартных шаблонов (Standard Template Library, STL) - наиболее совершенный инструмент языка программирования С++. Ядро библиотеки стандартных шаблонов состоит из четырех основных элементов:

  • контейнеров,
  • итераторов,
  • алгоритмов,
  • функциональных объектов.

Контейнеры - это объекты, предназначенные для хранения других объектов. Контейнеры бывают различных типов: массивы, очереди, списки и т. д.

Алгоритмы - выполняют операции над содержимым контейнеров. Существуют алгоритмы для инициализации, сортировки, поиска или замены содержимого контейнеров.

Итераторы - это объекты, которые по отношению к контейнерам играют роль указателей. Они позволяют получать доступ к содержимому контейнера так, как указатель позволяет получать доступ к элементу массива.

Функциональные объекты - это объекты, действующие как функции. Они могут быть объектами класса или указателями на функции, включающими в себя имя функции, поскольку именно оно работает как указатель.

Основные контейнеры, определенные в SТL, представлены далее:

КонтейнерОписаниеЗаголовок
bitsetМножество битов<bitset>
dequeДвунаправленный список<deque>
listЛинейный список<list>
mapАссоциативный список для хранения пар ключ/значение, где с каждым ключом связано только одно значение<map>
multimapАссоциативный список для хранения пар ключ/значение, где с каждым ключом связано два или более значений<map>
multisetМножество, в котором каждый элемент не обязательно уникален<set>
priority_queueОчередь с приоритетом<queue>
queueОчередь<queue>
setМножество, в котором каждый элемент уникален<set>
stackСтек<stack>
vectorДинамический массив<vector>

Методы, общие для всех контейнеров:

ИмяНазначение
size()Возвращает число элементов в контейнере
empty()Возвращает true, если контейнер пуст
max_size()Возвращает максимально допустимый размер контейнера
begin()Возвращает итератор на начало контейнера
end()Возвращает итератор на конец контейнера
rbegin()Возвращает реверсивный итератор на конец контейнера (итерации происходят в обратном направлении)
rend()Возвращает реверсивный итератор на начало контейнера (итерации происходят в обратном направлении)

Алгоритмы предназначены для обработки контейнеров. Каждый контейнер имеет собственный базовый набор операций, но стандартные алгоритмы обеспечивают более широкий спектр действий. Кроме того, они позволяют одновременно работать с двумя контейнерами, имеющими разные типы. Для обеспечения доступа к алгоритмам SТL, нужно подключить заголовочный файл <algorithm>.

Основные алгоритмы STL приведены далее:

АлгоритмДействие
findВозвращает первый элемент с указанным значением
countСчитает количество элементов, имеющих указанное значение
equalСравнивает содержимое двух контейнеров и возвращает true, если все соответствующие элементы эквивалентны
searchИщет последовательность, значений в одном контейнере, которая соответствует такой же последовательности в другом
copyКопирует последовательность, значений из одного контейнера в другой или в другое место того же контейнера
swapОбменивает значения, хранящиеся в разных местах
sortСортирует значения в указанном порядке
mergeКомбинирует два сортированных диапазона значений для получения возможно большего диапазона
accumulateВозвращает сумму элементов в заданном диапазоне
for_eachВыполняет указанную функцию для каждого элемента контейнера
reverseМеняет на обратный порядок расположения элементов в контейнере