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