Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LectionSTL1.docx
Скачиваний:
11
Добавлен:
20.02.2016
Размер:
250.27 Кб
Скачать

Алгоритмы

Выполнение простых операций, специфичных для того или иного контейнера (например вставка или удаление элементов, получение числа элементов контейнера) возлагается на методы, определенные в контейнере (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 переупорядочивает элементы таким образом, что элементы, удовлетворяющие указанному предикату, предшествуют элементам, не удовлетворяющем ему.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]