Quels paramètres cette formule prend-elle lorsqu'elle est en mode « accumuler » ?

StackOverflow https://stackoverflow.com//questions/22051945

  •  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';
}
Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top