Алгоритмы 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()

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



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

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