Функция views::filter
Функция views::filter создает представление,
которое включает в себя только те элементы исходного
диапазона, для которых предикат возвращает true.
В первый параметр мы передаем диапазон или представление,
а во второй - предикат, который принимает элемент
и возвращает bool. Элементы, для которых предикат
вернул false, в результирующее представление не попадают.
Синтаксис
std::views::filter(range, predicate)
Пример
Давайте отфильтруем из вектора только четные числа:
#include <iostream>
#include <vector>
#include <ranges>
using namespace std;
int main()
{
vector<int> vec = {1, 2, 3, 4, 5};
for (int num : vec | views::filter([](int n) {
return n % 2 == 0;
}))
{
cout << num << " ";
}
cout << endl;
return 0;
}
Результат выполнения кода:
2 4
Пример
Давайте отфильтруем из вектора числа, которые больше 3:
#include <iostream>
#include <vector>
#include <ranges>
using namespace std;
int main()
{
vector<int> vec = {1, 2, 3, 4, 5};
auto res = vec | views::filter([](int n) {
return n > 3;
});
for (int num : res)
{
cout << num << " ";
}
cout << endl;
return 0;
}
Результат выполнения кода:
4 5
Пример
Давайте отфильтруем строки, длина которых больше 3:
#include <iostream>
#include <vector>
#include <string>
#include <ranges>
using namespace std;
int main()
{
vector<string> vec = {"a", "ab", "abc", "abcd", "abcde"};
for (const string& str : vec | views::filter([](const string& s) {
return s.length() > 3;
}))
{
cout << str << " ";
}
cout << endl;
return 0;
}
Результат выполнения кода:
"abcd" "abcde"
Смотрите также
-
функция
views::transform,
которая преобразует элементы диапазона -
функция
views::take,
которая берет первые N элементов диапазона -
функция
views::drop,
которая пропускает первые N элементов диапазона -
функция
views::all,
которая создает представление из диапазона