ranges library (tsz. ranges libraries)
std::vector
, std::list
, stb.
A ranges
könyvtár:
std::ranges
névtér alatt.|
operátorral (pipe) lehet kombinálni a műveleteket (mint a Linux terminálban).
begin()
/ end()
manuálisan.
#include <ranges> // fő ranges header
#include <vector>
#include <iostream>
std::vector<int> nums = {1, 2, 3, 4, 5, 6};
auto even = nums | std::views::filter((int n) { return n % 2 == 0; });
for (int n : even) {
std::cout << n << " ";
}
// Kimenet: 2 4 6
std::views
Szűrés, transzformációk, szeletelés stb.
filter(pred)
: csak azokat, amikre pred(elem)
igaz.transform(f)
: minden elemre alkalmazza f
-et.take(n)
: az első n
elemet.drop(n)
: az első n
elemet kihagyja.reverse
, unique
, iota
, zip
, stb.
std::ranges::
algoritmusokUgyanazok, mint a std::
algoritmusok, de range
-et várnak, nem iterátor párokat
.
std::ranges::sort(myVec);
std::ranges::copy(filtered, std::ostream_iterator<int>(std::cout, " "));
std::vector<int> data = {1, 2, 3, 4, 5, 6, 7, 8};
auto processed = data
| std::views::filter((int x) { return x % 2 == 0; })
| std::views::transform((int x) { return x * x; });
for (int x : processed)
std::cout << x << " "; // 4 16 36 64
Komponens | Példa használat |
---|---|
std::views::filter
|
std::views::filter((x) { return x > 0; }) |
std::views::transform
|
std::views::transform((x) { return x * 2; }) |
std::views::take
|
std::views::take(5) |
std::views::drop
|
std::views::drop(3) |
std::ranges::sort
|
std::ranges::sort(myVec)
|
Ha szeretnél példát látni a saját projektedben (pl. Team
, Character
, vector<string>
szűrés), szívesen mutatok konkrét implementációt ranges-szel.