Ranges
- C++ kursu
- İleri seviye
- Ders 5/83
- 5 dk
C++20 ranges ile kompozisyonel algoritmaları öğrenirsin.
Ranges
Ranges (C++20), <ranges> başlığında bulunan composable (birleştirilebilir) görünüm altyapısıdır. std::views::filter ve std::views::transform gibi görünümler, kapsayıcıyı kopyalamadan üzerinde işlem yapar.
Sözdizimi: v | std::views::filter(koşul) | std::views::transform(dönüşüm). | işleci görünümleri zincirler; her görünüm bir önceki zinciri kaynağı alır. Sonuç yalnızca iterasyonda hesaplanır; bu nedenle ara kapsayıcılar oluşmaz.
std::views::transform
std::views::transform, her öğeyi bir fonksiyonla dönüştürür. Örnek: v | std::views::transform([](int x){ return x * x; }) her öğenin karesini alır. Zincir filter | transform biçiminde kurulursa önce süzülür, sonra dönüştürülür.
Transform, kaynak kapsayıcıyı değiştirmez; yeni bir görünüm üretir. Görünüm, iterasyon sırasında hesaplandığı için bellek maliyeti yoktur. Bu, eski std::transform algoritmasından farklı olarak ara kapsayıcı gerektirmez.
Uygulama Süz ve dönüştür
std::vector<int> v{1, 2, 3, 4, 5, 6}; oluştur. v | std::views::filter ile çiftleri tut, sonra std::views::transform ile her birini x * 10'a dönüştür. for döngüsü ile her sonucu std::cout'a yazdır.
Başlangıç kodu
#include <iostream>
#include <vector>
#include <ranges>
int main() {
std::vector<int> v{1, 2, 3, 4, 5, 6};
// Süz ve dönüştür, sonra yazdır
return 0;
}Örnek çözüm
#include <iostream>
#include <vector>
#include <ranges>
int main() {
std::vector<int> v{1, 2, 3, 4, 5, 6};
auto r = v | std::views::filter([](int x){ return x % 2 == 0; })
| std::views::transform([](int x){ return x * 10; });
for (int x : r) std::cout << x;
return 0;
}Beklenen çıktı
204060
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Zincir işlecini tamamla
auto r = v ____ std::views::filter([](int x){ return x % 2 == 0; });
auto r = v | std::views::filter([](int x){ return x % 2 == 0; });
Açıklama: | işleci görünümleri zincirler.
2 std::views::filter ne yapar?
- Koşula uyanları tutar Doğru cevap
- Her öğeyi dönüştürür
- Kapsayıcıyı kopyalar
- Kapsayıcıyı sıralar
Açıklama: filter, koşulu sağlayan öğeleri bırakır.
3 Görünümü amacına eşle
| Kavram | Anlamı |
|---|---|
std::views::filter |
Koşula göre süz |
std::views::transform |
Her öğeyi dönüştür |
std::views::take |
İlk n öğeyi al |
std::views::reverse |
Ters sırala |