Modern C++
- C++ kursu
- İleri seviye
- Ders 80/83
- 6 dk
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
#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
#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
data | std::____::filter([](int v) { return v > 0; })
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.