ranges library
Megjelenés
Főnév
ranges library (tsz. ranges libraries)
- (informatika) A C++ Ranges Library a C++20 egyik legfontosabb újdonsága. A célja: egyszerűbb, olvashatóbb, deklaratív stílusú kód írása a konténerek feldolgozásához – mint a
std::vector,std::list, stb.
📦 Mi az a Ranges Library?
A ranges könyvtár:
- Új algoritmusokat biztosít
std::rangesnévtér alatt. - Views segítségével láncolható műveleteket tesz lehetővé.
- A
|operátorral (pipe) lehet kombinálni a műveleteket (mint a Linux terminálban).
✅ Előnyök
- Nem kell
begin()/end()manuálisan. - Egyszerűbb és biztonságosabb szűrés/sorrendezés.
- “Lazy” értékelés – csak akkor dolgozza fel az adatokat, ha muszáj.
🔧 Használat
📌 Fejléc
#include <ranges> // fő ranges header
#include <vector>
#include <iostream>
📎 Alap példa
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
🔩 Fontos komponensek
📌 std::views
Szűrés, transzformációk, szeletelés stb.
filter(pred): csak azokat, amikrepred(elem)igaz.transform(f): minden elemre alkalmazzaf-et.take(n): az elsőnelemet.drop(n): az elsőnelemet kihagyja.reverse,unique,iota,zip, stb.
📌 std::ranges:: algoritmusok
Ugyanazok, 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, " "));
🧪 Kombinálás példa
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
⚠️ Figyelmeztetések
- Csak C++20-ban és újabb fordítóban érhető el (pl. GCC 10+, Clang 12+, MSVC 2019+).
- “Lazy” értékelés miatt a nézett objektumok nem másolatokat, hanem referenciákat használnak.
📚 TL;DR táblázat
| 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.
- ranges library - Szótár.net (en-hu)
- ranges library - Sztaki (en-hu)
- ranges library - Merriam–Webster
- ranges library - Cambridge
- ranges library - WordNet
- ranges library - Яндекс (en-ru)
- ranges library - Google (en-hu)
- ranges library - Wikidata
- ranges library - Wikipédia (angol)