Çok sayıda standart kitaplık konteynerine sahibim, bu yüzden onları bir araya getirdiğimde taşmaya neden olabilirler.Bir ortalama hesaplamak için std :: accumulate ve bir lambda'yı nasıl kullanabilirim?
std::vector<int> v = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
Ben birikir :: std, bu kabın ortalamasını hesaplamak istiyorum ama ben birlikte tüm numaraları ekleyemezsiniz: en bu konteyner var sayalım. Ben sadece v[0]/v.size() + v[1]/v.size() + ...
ile hesaplayacağım. Bu yüzden ayarlayın: ->
çıkışını gösterir nerede
auto lambda = ...;
std::cout << std::accumulate(v.begin(), v.end(), 0, lambda) << std::endl;
, şimdiye kadar denedim budur:
lambda = [&](int a, int b){return (a + b)/v.size();}; -> 1
lambda = [&](int a, int b){return a/v.size() + b/v.size();}; -> 1
lambda = [&](int a, int b){return a/v.size() + b;}; -> 10
nasıl doğru ortalama böyle çıktı olacağını 5
üretebilir?
'5' doğru cevap değildir:
(veya en azından önemli ölçüde azaltmak) hatası yuvarlama birikimini önlemek için, bir gibi bir şey yapabilirsiniz. –@BenVoigt Tamsayı bölümü kullanıyorsanız. – EMBLEM
Tamsayılı bölüm, ortalama hesaplanmasında kullanılmaz. Std :: accumulate' ile birleştiğinde, daha da kötüsü - kısmi miktarlarınızı mahvedecek. Son sonucun tamsayı bölme kurallarına göre yuvarlanmasını istiyorsanız, sorunuzda açıkça belirtmeniz gerekir (ve sonra bir ortalamayı bulamıyorsunuz). Aksi takdirde, tam sayı bölme kullanımınız her okuyucu için bir hataya benziyor. –