std::accumulate
- C++ kursu
- Orta seviye
- Ders 74/116
- 5 dk
std::accumulate ile toplu hesap öğrenirsin.
std::accumulate
std::accumulate bir aralıktaki tüm öğeleri birleştirir. Varsayılan olarak toplar: int sum = std::accumulate(v.begin(), v.end(), 0);. Üçüncü parametre başlangıç değeridir; toplama bu değerden başlanır.
std::accumulate <numeric> başlığında tanımlıdır (algorithm'de değil). Başlangıç değeri sonucun türünü belirler: 0 int, 0.0 double toplar. Dördüncü parametre olarak özel bir işlem verebilirsin; örneğin çarpma için std::multiplies<int>(). Böylece accumulate sadece toplamayı değil, genel bir 'fold' (katlama) işlemi yapar.
Başlangıç değeri ve tür
Başlangıç değeri sadece toplamanın başlangıç noktasını değil, sonucun türünü de belirler. 0 yazarsan int toplama, 0.0 yazarsan double toplama yapılır. Double vektörü için 0 yazarsan kesirli kısım kaybolur.
Örnek: std::vector<double> prices = {9.99, 14.50, 3.75}; için std::accumulate(prices.begin(), prices.end(), 0.0) yazarsın. Bu, 28.24 sonucunu verir. Eğer 0 yazarsan sonuç 28 olur (kesir yok). Bu yüzden başlangıç değeri vektörün türüyle uyumlu olmalıdır.
Uygulama Toplamı yazdır
v = {1, 2, 3, 4, 5} vektörünün toplamını std::accumulate ile bul ve std::cout ile yazdır. Başlangıç değeri 0 olsun. #include <numeric> gerektiğini unutma.
Başlangıç kodu
#include <iostream>
#include <vector>
#include <numeric>
int main() {
std::vector<int> v = {1, 2, 3, 4, 5};
// std::accumulate ile toplamı yazdır
return 0;
}Örnek çözüm
#include <iostream>
#include <vector>
#include <numeric>
int main() {
std::vector<int> v = {1, 2, 3, 4, 5};
int sum = std::accumulate(v.begin(), v.end(), 0);
std::cout << sum;
return 0;
}Beklenen çıktı
15
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Parçayı rolüne eşle
| Kavram | Anlamı |
|---|---|
std::accumulate |
Toplama/katlama |
v.begin() |
Aralık başı |
v.end() |
Aralık sonu |
0 (üçüncü param) |
Başlangıç değeri |
2 std::accumulate'in üçüncü parametresi nedir?
std::accumulate(v.begin(), v.end(), ???);- Son öğe
- Fonksiyon nesnesi
- İndeks
- Başlangıç değeri Doğru cevap
Açıklama: Üçüncü parametre başlangıç değeridir.
3 accumulate çağrısını tamamla
int sum = std::____(v.begin(), v.end(), 0);
int sum = std::accumulate(v.begin(), v.end(), 0);
Açıklama: std::accumulate öğeleri toplar.