Алгоритмы STL. Немодифицирующие алгоритмы

   
На этом шаге мы рассмотрим немодифицирующие алгоритмы.

   
Немодифицирующие алгоритмы сохраняют как порядок следования обрабатываемых элементов, так и их значения. Они работают с
итераторами ввода и прямыми итераторами и поэтому могут вызываться для всех стандартных контейнеров. В таблице 1 перечислены
алгоритмы стандартной библиотеки STL, не изменяющие состояния контейнера.

Таблица 1. Немодифицирующие алгоритмы

Название Описание
for_each() Выполняет операцию с каждым элементом
count() Возвращает количество элементов
count_if() Возвращает количество элементов, удовлетворяющих заданному критерию
min_element() Возвращает элемент с минимальным значением
max_element() Возвращает элемент с максимальным значением
find() Ищет первый элемент с заданным значением
find_if() Ищет первый элемент, удовлетворяющий заданному критерию
search_n() Ищет первые n последовательных элементов с заданными свойствами
search() Ищет первое вхождение подинтервала
find_end() Ищет последнее вхождение подинтервала
find_first_of() Ищет первый из нескольких возможных элементов
adjacent_find() Ищет два смежных элемента, равных по заданному критерию
equal() Проверяет, равны ли два интервала
mismatch() Возвращает первый различающийся элемент в двух интервалах
lexicographical_compare() Проверяет, что один интервал меньше другого по лексикографическому критерию

   
Один из важнейших алгоритмов for_each() для каждого элемента вызывает операцию, переданную при вызове. Обычно
операция выполняет некоторую обработку на уровне отдельных элементов. Например, при вызове for_each() можно передать
функцию, которая выводит значение элемента. Кроме того, алгоритм for_each() позволяет вызвать для каждого элемента
модифицирующую операцию. Следовательно, for_each() можно отнести как к модифицирующим, так и к
немодифицирующим алгоритмам. Впрочем, старайтесь по возможности вместо for_each() использовать другие алгоритмы,
реализованные специально для конкретных задач.

   
Некоторые немодифицирующие алгоритмы предназначены для поиска элементов. К сожалению, имена поисковых алгоритмов
выглядят недостаточно логично, к тому же они отличаются от имен аналогичных строковых функций (таблица 2). Как это часто
бывает, путаница возникла по историческим причинам. Во-первых, STL и строковые классы проектировались независимо
друг от друга. Во-вторых, алгоритмы find_end(), find_first_of() и search_n() не входили в исходную версию STL.
Например, имя find_end() вместо search_end() было выбрано случайно. Также случайно выяснилось, что форма
search_n() нарушает общие концепции исходной версии STL.

Таблица 2. Сравнение строковых функций и алгоритмов поиска

Поиск Строковая функция Алгоритм STL
Первое вхождение одного элемента find() find()
Последнее вхождение одного элемента rfind() find() с обратным итератором
Первое вхождение подинтервала find() search()
Последнее вхождение подинтервала rfind() find_end()
Первое вхождение нескольких элементов find_first_of() find_first_of()
Последнее вхождение нескольких элементов find_last_of() find_first_of() с обратным итератором
Первое вхождение n последовательных элементов   search_n()

   
На следующем шаге мы рассмотрим модифицирующие алгоритмы.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий