05.05.2021 в 00:19
Аким Солянкин
Стандартная библиотека шаблонов в C++
Когда мы разрабатываем некоторые приложения, нам приходится иметь дело с данными. Данные - это набор значений, и для хранения набора значений нам нужны структуры данных. CPP предоставляет встроенные библиотеки классов для всех этих структур данных, и эта коллекция классов называется STL (стандартные библиотеки шаблонов).
STL состоит из:
- Алгоритмы
- Контейнеры
- Итераторы
- Алгоритмы - это функции, используемые для выполнения операций с контейнерами.
- Например:
sort()
reverse()
count()
find()
binary_search()
lower_bound()
upper_bound()
next_permutation()
prev_permutation()
distance()
- Контейнер - это объект-держатель, в котором хранится набор других объектов. Они реализованы как шаблоны классов, что обеспечивает большую гибкость в типах, поддерживаемых как элементы.
- Контейнер управляет пространством для хранения своих элементов и предоставляет функции-члены для доступа к ним напрямую или через итераторы.
- Многие контейнеры имеют несколько общих функций и имеют общие функции. Решение о том, какой тип контейнера использовать для конкретной потребности, как правило, зависит не только от функциональности, предлагаемой контейнером, но и от эффективности некоторых из его членов.
- Например:
vector
list
forward_list
deque
priority_queue
stack
set
multiset
map
multimap
- Итератор - это любой объект, который, указывая на какой-либо элемент в диапазоне элементов (например, массив или контейнер), имеет возможность выполнять итерацию по элементам этого диапазона с использованием набора операторов (по крайней мере, с помощью метода increment (
++
) и оператора разыменования (*
)). - Наиболее очевидной формой итератора является указатель: указатель может указывать на элементы в массиве и может выполнять итерацию по ним с помощью оператора приращения (
++
). Но возможны и другие виды итераторов. Например, каждый тип контейнера (например, список) имеет определенный тип итератора, предназначенный для перебора его элементов. - Например:
iterator
iterator_traits
reverse_iterator
move_iterator
back_insert_iterator
front_insert_iterator
insert_iterator
istream_iterator
ostream_iterator
input_iterator_tag