double numbers[ ] = { 1, 0.5 ,0.333333 ,0.25 ,0.2, 0.166667, 0.142857, 0.125,
0.111111, 0.1 } ;
std::vector<double> doublenumbers (numbers , numbers + 10) ;
std::cout << std::accumulate (doublenumbers.begin() , doublenumbers.end() , 0) ;
Ceci produit 1, ce qui est évidemment faux. Des explications?C++ std :: accumulate ne donne pas la somme attendue
+1, c'est une Gotcha importante qui m'a mordu plusieurs fois. –
également, le vecteur n'est pas nécessaire; vous pouvez utiliser des pointeurs comme itérateurs: 'std :: accumulate (nombres, nombres + sizeof nombres/sizeof * nombres, 0.0); [En code réel, vous auriez probablement une constante ou une variable 'num_numbers' plutôt que' sizeof numbers/sizeof * numbers'] –
Voir ma réponse pour un moyen facile d'éviter ce mal de tête à l'avenir. –