Этот сайт использует cookies. Продолжение работы с сайтом означает, что Вы согласны!
Алгоритмы
В состав STL входят функции, позволяющие применять различные алгоритмы к элементам одного или нескольких контейнеров. Диапазон внутри контейнера задается с помощью двух итераторов: first
и last
. Итератор first
указывает на первый элемент диапазона, а итератор last
— на позицию после последнего элемента диапазона. Иными словами элемент с позицией last
в диапазон не попадает. Обратите внимание: класс контейнера может быть произвольным, но он должен поддерживать требуемые операции с итераторами. Тип итератора можно узнать по прототипу в заголовочном файле. В целях экономии места, в книге вместо прототипов мы будем указывать только форматы функций без указания типов, а в примерах будем использовать контейнер vector
, который поддерживает итераторы произвольного доступа.
Если в операции участвуют два контейнера, то диапазон внутри первого контейнера задается с помощью итераторов first1
и last1
, а начало второго диапазона задается с помощью итератора first2
. В этом случае количество элементов внутри двух диапазонов должно совпадать. Если второй диапазон задается с помощью двух итераторов, то количество элементов может быть разным. Некоторые функции записывают результат операции в другой контейнер. В этом случае начало диапазона с результатами задается с помощью итератора result
.
Помимо реализованного функциями алгоритма в некоторых случаях существует возможность указать пользовательскую функцию, которая будет применена к элементам диапазона. В качестве значения можно передать указатель на функцию, функтор или лямбда-выражение. В примерах этой главы мы будем использовать лямбда-выражения.
Итак, давайте рассмотрим эти функции.
Перебор элементов
Выполнить перебор элементов контейнера и применить к каждому элементу пользовательскую функцию позволяет функция for_each()
. Прототип функции:
#include <algorithm>
template<typename _InputIterator, typename _Function>
_Function for_each(_InputIterator first, _InputIterator last,
_Function f);
С помощью функции for_each()
умножим значение каждого элемента массива на 2
, а затем выведем все значения в окно консоли:
std::vector<int> arr = {1, 2, 3};
// Умножаем все элементы на 2
std::for_each( arr.begin(), arr.end(),
[](int &a) { a *= 2; } );
// Выводим значения всех элементов
std::for_each( arr.begin(), arr.end(),
[](int &a){ std::cout << a << ' '; } );
std::cout << std::endl; // 2 4 6
Аналогичную операцию можно выполнить с помощью цикла for each
:
std::vector<int> arr = {1, 2, 3};
// Умножаем все элементы на 2
for (int &el : arr) {
el *= 2;
}
// Выводим значения всех элементов
for (int &el : arr) std::cout << el << ' ';
std::cout << std::endl; // 2 4 6
Реквизиты
ЮMoney (Yandex-деньги): 410011140483022
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов