CodeBlanks Logo Icon CodeBlanks

Ranges

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

main.cpp
#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

main.cpp
#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

Soru
auto r = v ____ std::views::filter([](int x){ return x % 2 == 0; });
Cevap
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

İleri seviye bölümündeki tüm dersler