Обзор библиотеки algorithm
В данной статье мы познакомимся с некоторыми функциями из библиотеки algorithm. Само название данной библиотеки говорит нам о том, что в ней содержатся различные алгоритмы. Зачастую это такие, как поиск минимума/максимума, подсчет, разворот задом наперёд, то есть рутинные функции. Для того, чтобы не писать их каждый раз “руками”, и была создана данная библиотека. Далее мы рассмотрим 10 самых важных функций:
Далее мы будем использовать:
- first - итератор начала
- last - итератор конца
- value - значение
count
count(first, last, value)
Возвращает количество элементов, равных value. Например, у нас имеется вектор, и мы хотим узнать, сколько в нём нулей:
find
find(first, last, value)
Возвращает итератор на первый элемент, равный value. Например, у нас имеется массив константоной длины, и мы хотим найти 4:
А что вернет find, если элемента со значением value нет? Будет возвращен указатель на last. В этом легко убедиться, если проанализировать следующий код:
fill
fill(first, last, value)
Заполняет диапазон значениями value Здесь всё просто: заполним вектор нулями:
reverse
reverse(first, last)
Разворачивает диапазон задом наперед. Допустим, у нас есть строка. И мы хотим проверить, является ли строка палиндромом:
swap
swap(a,b)
Обменивает a и b местами.
max/min
max(a,b) - берет максимум из двух чисел min(a,b) - берет минимум из двух чисел
Если нам нужно найти максимум/минимум из \(n\) чисел, то мы можем использовать следующее:
next_permutation/prev_permutation
next_permutation(first,last) - позволяет выполнить перестановку в диапазоне prev_permutation(first,last) - позволяет выполнить обратную перестановку в диапазоне
Пусть у нас имеется некоторая последовательность, для котрой мы хотим посмотреть все перестановки:
max_element/min_element
max_element(first,last) - возвращает итератор на максимальный элемент в массиве min_element(first,last) - возвращает итератор на минимальный элемент в массиве
remove
remove(first, last, value)
Удаляет все элементы со значением value
rotate
rotate(first, n_first, last)
Зеркально отражает последовательность. В данном случае n_first - элемент будет первым в последовательности. Также можно рассматривать как сдвиг. Рассмотрим на примере строк: