CodeBlanks Logo Icon CodeBlanks

Modern C++

Modern C++ (concepts, ranges) ile veri işleme yazarsın.

Modern C++ ile veri işleme

Bu derste Framework'e process_data metodunu ekleyeceğiz. Bu metod, concepts ile kısıtlanmış bir şablon ve ranges ile zincirleme süzme yapar.

Örnek: template<std::integral T> int process_data(const std::vector<T>& data). Gövde: for (auto x : data | std::views::filter([](T v) { return v > 0; })) sum += x;. Bu, pozitif değerleri süzüp toplar. std::integral kısıtı yalnızca tam sayı türleri kabul eder; std::views::filter tembel bir görünüm üretir. Önceki dersin iskeletini alıp bu metodu ekleyeceğiz.

ranges ile zincirleme

Ranges, algoritmaları | operatörü ile zincirlemeyi sağlar. data | std::views::filter(pred), veriyi süzüp tembel bir görünüm verir.

Örnek: data | std::views::filter([](T v) { return v > 0; }). Bu, negatif değerleri atar. Sonuçta bir for döngüsü ile toplam alırsın. Eski C++'ta std::copy_if ile ara vektör gerekirdi; ranges ile ara değişken yoktur. Bu, hem daha okunaklı hem de daha verimli kod demektir. Çıktı önceki dersin "Proje hazır" satırının altında birikir.

Uygulama process_data metodunu ekle

Framework'e template<std::integral T> int process_data(const std::vector<T>& data) metodunu ekle. Gövdesi data | std::views::filter([](T v) { return v > 0; }) süzüp toplasın. run içinde std::vector<int> data{1, -2, 3}; tanımla ve std::cout << "toplam: " << process_data(data); ile yazdır.

Başlangıç kodu

main.cpp
#include <iostream>
#include <string>
#include <vector>
#include <ranges>
#include <algorithm>
#include <concepts>

class Framework {
public:
    int run();
    // process_data sablon metodunu ekle (integral concept ile)
};

int Framework::run() {
    std::cout << "Proje hazır" << std::endl;
    // process_data cagir ve sonuçu yazdir
    return 0;
}

int main() {
    Framework fw;
    fw.run();
    return 0;
}

Örnek çözüm

main.cpp
#include <iostream>
#include <string>
#include <vector>
#include <ranges>
#include <algorithm>
#include <concepts>

class Framework {
public:
    int run();
    template<std::integral T>
    int process_data(const std::vector<T>& data);
};

template<std::integral T>
int Framework::process_data(const std::vector<T>& data) {
    int sum = 0;
    for (auto x : data | std::views::filter([](T v) { return v > 0; })) {
        sum += x;
    }
    return sum;
}

int Framework::run() {
    std::cout << "Proje hazır" << std::endl;
    std::vector<int> data{1, -2, 3};
    std::cout << "toplam: " << process_data(data);
    return 0;
}

int main() {
    Framework fw;
    fw.run();
    return 0;
}

Beklenen çıktı

Proje hazır
toplam: 4

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Kavramı açıklamasıyla eşle

Kavram Anlamı
std::integral Tam sayı kısıtı
std::views::filter Süzme görünümü
ranges Zincirleme algoritmalar
concept Tür kısıtı

2 views filtre

Soru
data | std::____::filter([](int v) { return v > 0; })
Cevap
data | std::views::filter([](int v) { return v > 0; })

Açıklama: std::views::filter bir süzme görünümü üretir.

3 std::ranges ne sağlar?

  • İstisna güvenliği
  • Çoklu iş parçacığı
  • Bellek yönetimi
  • Algoritmaları zincirleme kompozisyon Doğru cevap

Açıklama: ranges, algoritmaları | ile zincirlemeyi sağlar.

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