Урок №199. Алгоритмы STL

  Юрий  | 

    | 

  Обновл. 11 Янв 2019  | 

 2680

 ǀ   2 

Помимо контейнеров и итераторов, STL также предоставляет ряд универсальных алгоритмов для работы с элементами контейнеров. Они позволяют выполнять такие операции, как поиск, сортировка, вставка, изменение позиции, удаление и копирование элементов контейнера.

Алгоритмы STL реализованы в виде глобальных функций, которые работают с использованием итераторов. Это означает, что каждый алгоритм нужно реализовать всего лишь один раз, и он, как правило, будет работать со всеми контейнерами, которые предоставляют набор итераторов (включая и ваши собственные (пользовательские) контейнерные классы). Хотя это имеет огромный потенциал и даёт возможность быстро писать сложный код, у алгоритмов также есть и тёмная сторона: некоторая комбинация алгоритмов и типов контейнеров может не работать/работать с плохой производительностью/вызывать бесконечные циклы. Поэтому следует быть осторожным.

STL предоставляет довольно много алгоритмов – в этом уроке мы затронем лишь некоторые из наиболее распространенных и простых в использовании. Для их работы нужно подключить заголовочный файл algorithm.

min_element и max_element

Алгоритмы min_element и max_element находят минимальный и максимальный элементы в контейнере:

Результат выполнения программы выше:

0 4

find и list::insert


В следующем примере мы используем алгоритм find(), чтобы найти определённое значение в списке, а затем используем функцию list::insert() для добавления нового значения в список:

Результат выполнения программы выше:

0 1 7 2 3 4

sort и reverse

В следующем примере мы отсортируем весь вектор, а затем выполним реверс его элементов:

Результат выполнения программы выше:

-8 -3 3 4 5 8 12
12 8 5 4 3 -3 -8

Обратите внимание, общий алгоритм sort() не работает с вектором – у вектора есть свой собственный метод sort(), который в данном случае является более эффективным.

Заключение


Хотя это всего лишь небольшой пример алгоритмов, которые предоставляет STL, но этого уже должно быть достаточно, чтобы вы увидели, насколько легко использовать алгоритмы STL в сочетании с итераторами и контейнерами и какой от этого толк.

Оценить статью:

Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (26 оценок, среднее: 5,00 из 5)
Загрузка...

Комментариев: 2

  1. Аватар dshadov:

    Добрый день!
    С итераторами удобнее использовать auto:

    и так:

    и даже так:

    И еще, метода sort() у вектора нет, зато есть у list. Например, во втором примере можно было отсортировать список так:

Добавить комментарий для dshadov Отменить ответ

Ваш E-mail не будет опубликован. Обязательные поля помечены *