C++
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.
Örnek çözümü göster
#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;
}
Kendini test et
-
Kavramı açıklamasıyla eşle
- 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ı
-
views filtre
data | std::____::filter([](int v) { return v > 0; })
Cevabı göster
data | std::views::filter([](int v) { return v > 0; })
-
std::ranges ne sağlar?
- İstisna güvenliği
- Çoklu iş parçacığı
- Bellek yönetimi
- Algoritmaları zincirleme kompozisyon
Cevabı göster
Algoritmaları zincirleme kompozisyon — ranges, algoritmaları | ile zincirlemeyi sağlar.
Sıradaki ders: Concurrency