Алгоритмы STL. Алгоритмы (общие сведения)

   
На этом шаге мы приведем общие сведения об алгоритмах.

   
Алгоритмы уже были использованы ранее. На 98 и 105 шагах
рассматривалась роль алгоритмов и некоторые важные ограничения, связанные с их использованием. Любой алгоритм
STL работает с одним или несколькими интервалами, заданными при помощи итераторов. Для первого
интервала обычно задаются обе границы (начало и конец), а для остальных интервалов часто достаточно одного начала,
потому что конец определяется количеством элементов в первом интервале. Перед вызовом необходимо убедиться в том,
что заданные интервалы действительны, то есть начало интервала предшествует концу или совпадает с ним, а оба
итератора относятся к одному контейнеру. Кроме того, дополнительные интервалы должны содержать достаточное количество элементов.

   
Алгоритмы работают в режиме замены, а не в режиме вставки, поэтому перед вызовом алгоритма необходимо
убедиться в том, что приемный интервал содержит достаточное количество элементов. Специальные итераторы вставки
(смотри 223 шаг) переводят алгоритм в режим вставки.

   
Для повышения мощи и гибкости некоторые алгоритмы позволяют передавать пользовательские операции, которые
вызываются при внутренней работе алгоритма. Такие операции оформляются в виде функций или объектов функций.
Функция, возвращающая логическое значение, называется предикатом. Предикаты применяются в
следующих ситуациях.

  • Функция (или объект функции), определяющая унарный предикат, может передаваться алгоритму поиска в
    качестве критерия поиска. Унарный предикат проверяет, соответствует ли элемент заданному критерию. Например,
    это позволяет найти первый элемент со значением, меньшим 50.
  • Функция (или объект функции), определяющая бинарный предикат, может передаваться алгоритму сортировки в
    качестве критерия сортировки. Бинарный предикат сравнивает два элемента. Например, с помощью бинарного
    предиката можно отсортировать объекты, представляющие людей, по фамилиям и но именам (смотри пример на
    239 шаге).
  • Унарный предикат может использоваться как критерий, определяющий, к каким элементам должна применяться
    операция. Например, из коллекции можно удалить только элементы с нечетными значениями.
  • Предикаты также используются для модификации операций в численных алгоритмах. Например, алгоритм
    accumulate(), обычно вычисляющий сумму элементов, также позволяет вычислять произведения всех элементов.
    Помните, что состояние предиката не должно изменяться вследствие вызова функции (смотри 243 шаг).

   
Примеры функций и объектов функций, передаваемых в виде параметров алгоритмов, приводятся на
111 и 115 шагах.

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



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

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