Функция views::enumerate
Функция views::enumerate создает представление,
которое добавляет порядковый номер к каждому элементу
исходного диапазона. В первом параметре мы передаем
диапазон, который нужно пронумеровать. Функция возвращает
представление, элементы которого являются парами:
первый элемент пары - это индекс (начиная с 0),
а второй - значение исходного элемента.
Синтаксис
std::views::enumerate(range)
Пример
Давайте пронумеруем элементы вектора с числами:
#include <iostream>
#include <vector>
#include <ranges>
using namespace std;
int main()
{
vector<int> v = {1, 2, 3, 4, 5};
for (auto [index, value] : v | views::enumerate)
{
cout << index << ": " << value << endl;
}
return 0;
}
Результат выполнения кода:
"0: 1"
"1: 2"
"2: 3"
"3: 4"
"4: 5"
Пример
Давайте пронумеруем элементы вектора со строками:
#include <iostream>
#include <vector>
#include <string>
#include <ranges>
using namespace std;
int main()
{
vector<string> v = {"a", "b", "c", "d", "e"};
for (auto [index, value] : v | views::enumerate)
{
cout << index << ": " << value << endl;
}
return 0;
}
Результат выполнения кода:
"0: a"
"1: b"
"2: c"
"3: d"
"4: e"
Пример
Давайте используем views::enumerate вместе
с views::filter, чтобы пронумеровать только
четные элементы:
#include <iostream>
#include <vector>
#include <ranges>
using namespace std;
int main()
{
vector<int> v = {1, 2, 3, 4, 5};
auto res = v
| views::filter([](int x) { return x % 2 == 0; })
| views::enumerate;
for (auto [index, value] : res)
{
cout << index << ": " << value << endl;
}
return 0;
}
Результат выполнения кода:
"0: 2"
"1: 4"
Смотрите также
-
функция
views::filter,
которая фильтрует элементы диапазона -
функция
views::transform,
которая преобразует элементы диапазона -
функция
views::keys,
которая извлекает ключи из пар -
функция
views::values,
которая извлекает значения из пар