CodeBlanks Logo Icon CodeBlanks

Özet - Concepts

concept, requires ve standard concepts'ı birleştirerek bir generic algoritma yazarsın.

Özet - Concepts

Bu grupta concept, requires, standard concepts, compound requirement ve concept overloading'i öğrendin.

Concept'ler şablon kısıtlarını adlandırır; requires ifadesi derleme zamanında ifade denetimi yapar; std::integral ve std::floating_point hazır concept'lerdir; compound requirement dönüş türünü ve noexcept koşulunu da sorgular; concept overloading ise tür temelli aşırı yüklemeyi derleme zamanında ayrıştırır.

Şimdi bu dördü birleştiren bir generic accumulate algoritması yazacaksın. Bu, concept'lerle yazılmış güvenli ve okunaklı bir şablon olacak.

Uygulama Generic accumulate yaz

template<std::integral T> T accumulate(const std::vector<T>& data) şablon fonksiyonunu yaz. Gövdesi veriyi toplayıp döndürsün. main içinde std::vector<int> data{1, 2, 3, 4}; oluştur ve accumulate(data) çağrısının sonuçunu std::cout ile yaz.

Başlangıç kodu

main.cpp
#include <iostream>
#include <vector>
#include <concepts>

// accumulate şablon fonksiyonunu buraya yaz

int main() {
    // data oluştur, çağır ve yazdır
    return 0;
}

Örnek çözüm

main.cpp
#include <iostream>
#include <vector>
#include <concepts>

template<std::integral T>
T accumulate(const std::vector<T>& data) {
    T sum = T{0};
    for (auto x : data) {
        sum += x;
    }
    return sum;
}

int main() {
    std::vector<int> data{1, 2, 3, 4};
    std::cout << accumulate(data);
    return 0;
}

Beklenen çıktı

10

Soru ve cevaplar

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

1 Hangi anahtar sözcük concept tanımını başlatır?

  • template
  • static_assert
  • concept Doğru cevap
  • requires

Açıklama: concept anahtar sözcüğü concept tanımını başlatır.

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

Kavram Anlamı
concept Adlandırılmış kısıt
requires İfade denetimi
std::integral Hazır integral concept
compound Dönüş türü denetimi

3 accumulate çağrısı

Soru
std::cout << ____(data.begin(), data.end());
Cevap
std::cout << accumulate(data.begin(), data.end());

Açıklama: accumulate fonksiyonu bir yineleyici aralığını toplar.

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