Функция views::join
Функция views::join из диапазонной библиотеки C++ создает представление,
которое объединяет все вложенные диапазоны в один плоский диапазон.
Она принимает диапазон диапазонов (например, вектор векторов или вектор строк)
и возвращает представление, элементы которого следуют друг за другом без учета
границ между вложенными диапазонами. Это позволяет использовать один цикл
для перебора всех элементов вместо вложенных циклов.
Синтаксис
std::views::join(range)
Пример
Давайте объединим вектор векторов в один плоский диапазон и выведем все элементы через пробел:
#include <iostream>
#include <vector>
#include <ranges>
using namespace std;
int main()
{
vector<vector<int>> v = {{1, 2}, {3, 4, 5}};
for (int n : v | views::join)
{
cout << n << " ";
}
cout << endl;
return 0;
}
Результат выполнения кода:
1 2 3 4 5
Пример
Давайте объединим вектор строк в один диапазон символов и выведем все символы последовательно:
#include <iostream>
#include <vector>
#include <string>
#include <ranges>
using namespace std;
int main()
{
vector<string> v = {"abc", "de"};
for (char ch : v | views::join)
{
cout << ch;
}
cout << endl;
return 0;
}
Результат выполнения кода:
"abcde"
Пример
Давайте объединим вложенные диапазоны и применим к результату фильтрацию, оставив только четные числа:
#include <iostream>
#include <vector>
#include <ranges>
using namespace std;
int main()
{
vector<vector<int>> v = {{1, 2, 3}, {4, 5, 6}};
for (int n : v | views::join | views::filter([](int x) { return x % 2 == 0; }))
{
cout << n << " ";
}
cout << endl;
return 0;
}
Результат выполнения кода:
2 4 6
Смотрите также
-
функция
views::all,
которая создает представление из диапазона -
функция
views::filter,
которая фильтрует элементы диапазона -
функция
views::transform,
которая преобразует элементы диапазона -
функция
views::split,
которая разбивает диапазон на поддиапазоны