Quels paramètres cette formule prend-elle lorsqu'elle est en mode « accumuler » ?
-
21-12-2019 - |
Question
Ce code est copié à partir d'une autre question utilisateur et je suis curieux de savoir comment fonctionne l'accumulation ici.J'obtiens le résultat correct de ce code, mais j'aimerais savoir quels paramètres prend lcm lorsqu'il est en mode "accumuler".L'initialisation comme A et la somme de la plage comme b ?S'il vous plaît, aidez
#include <numeric>
int gcd(int a, int b)
{
for (;;)
{
if (a == 0) return b;
b %= a;
if (b == 0) return a;
a %= b;
}
}
int lcm(int a, int b)
{
int temp = gcd(a, b);
return temp ? (a / temp * b) : 0;
}
int main()
{
int arr[] = { 5, 7, 9, 12 };
int result = std::accumulate(arr, arr + 4, 1, lcm);
std::cout << result << '\n';
}
La solution
Le premier argument selon lequel lcm
prendra est la valeur accumulée jusqu'à présent (qui commence à 1
, le troisième argument de std::accumulate
), et le deuxième argument sera un élément de arr
.Ensuite, peu importe lcm
return est passé comme premier argument et comme élément suivant dans arr
comme le deuxième.
Voir une référence pour plus de détails.
Tu pourrais facilement écrire a
et b
à la sortie standard à l'intérieur lcm
pour voir ce qui se passe.