Özet - Concepts
- C++ kursu
- İleri seviye
- Ders 66/83
- 5 dk
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
#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
#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ı
std::cout << ____(data.begin(), data.end());
std::cout << accumulate(data.begin(), data.end());
Açıklama: accumulate fonksiyonu bir yineleyici aralığını toplar.