
Алгоритмы
Выполнение простых операций, специфичных для того или иного контейнера (например вставка или удаление элементов, получение числа элементов контейнера) возлагается на методы, определенные в контейнере (insert(), erase(), size()). Однако более сложные операции, такие, например, как поиск и сортировка реализованы при помощи шаблонных функций. Эти функции называются обобщенными алгоритмами, поскольку они могут работать не с одной, а со многими структурами данных. Все алгоритмы реализованы в файле <algorithm>. При их использовании следует подключить данный файл директивой #include<algorithm>.
Обобщенные алгоритмы STL разделяются на четыре большие категории в соответствии с их семантикой. Неизменяющие алгоритмы над последовательностями работают с контейнерами без модификации их содержимого, в то время как изменяющие алгоритмы над последовательностями обычно модифицируют содержимое контейнеров, с которыми они имеют дело. Связанные с сортировкой алгоритмы включают алгоритмы сортировки и слияния, алгоритмы бинарного поиска и операции над множествами, работающие с упорядоченными последовательностями. Наконец, имеется небольшой набор обобщенных числовых алгоритмов.
Неизменяющие алгоритмы над последовательностями
Неизменяющие алгоритмы над последовательностями - это алгоритмы, которые непосредственно не модифицируют контейнеры, с которыми работают. Они включают алгоритмы для поиска элементов в последовательностях, проверки равенства и пересчета элементов последовательности.
Существует десять категорий данных алгоритмов:
for_each применяет данную процедуру к каждому элементу;
find выполняет линейный поиск;
find_first_of выполняет линейный поиск любого из множества значений; adjacent_find выполняет линейный поиск смежных равных элементов; count подсчитывает количество элементов с данным значением;
mismatch сканирует две последовательности в поисках первой позиции, где они различны;
equal сканирует две последовательности для проверки их поэлементной эквивалентности;
search сканирует последовательность в поисках другой подпоследовательности;search_nсканирует последовательность в поисках ряда идентичных элементов с данным значением;
find_end сканирует последовательность в поисках последнего совпадения с другой последовательностью.
Изменяющие алгоритмы над последовательностями
Изменяющие алгоритмы над последовательностями обычно модифицируют контейнеры, с которыми работают. В этой категории алгоритмов имеется двенадцать подкатегорий.
сорукопирует элементы в другую (возможно, перекрывающуюся) последовательность;
swap обменивает элементы одной последовательности с элементами другой;
transform замещает каждый элемент значением, возвращаемым после применения переданной в качестве параметра функции к элементу;
replace замещает каждый элемент, равный некоторому значению, копией другого заданного значения;
fill замещает каждый элемент копией другого заданного значения;
generate замещает каждый элемент значением, возвращаемым вызовом функции;
remove удаляет элементы, равные заданному значению;
unique удаляет последовательные равные элементы;
reverse обращает относительный порядок элементов;
rotate выполняет циклический сдвиг элементов;
random_shuffleпсевдослучайно переупорядочивает элементы;
partition переупорядочивает элементы таким образом, что элементы, удовлетворяющие указанному предикату, предшествуют элементам, не удовлетворяющем ему.