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

  Юрий  | 

    | 

  Обновл. 2 Июл 2019  | 

 3462

 ǀ   2 

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

Алгоритмы 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 (29 оценок, среднее: 5,00 из 5)
Загрузка...

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

  1. Аватар dshadov:

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

    и так:

    и даже так:

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

Добавить комментарий

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