Ссылка
Unäre Funktion, die ein Element aufnimmt der Bereich als Argument. Dies kann entweder sei ein Zeiger auf eine Funktion oder ein Objekt, dessen Klasse überlastet ist Operator(). Sein Rückgabewert, falls vorhanden, wird ignoriert.
Nach diesem Artikel habe ich erwartet, dass for_each das als drittes Argument angegebene Objekt tatsächlich ändert, aber es scheint, als ob for_each auf einem temporären Objekt operiert und nicht einmal das ihm übergebene Objekt verändert.
Also, warum wird es auf diese Weise umgesetzt? Es scheint viel weniger nützlich. Oder habe ich etwas falsch verstanden und mein Code enthält Fehler?
%Vor%Erwartete Ausgabe:
%Vor%Aber folgende Ausgabe:
%Vor% Das Funktionsobjekt wird nach Wert übernommen. for_each
gibt das Funktionsobjekt zurück, also wenn Sie es zu:
Sie erhalten die erwartete Ausgabe.
Obwohl James Recht hat, verwenden Sie std::accumulate
mit %Co_de% wäre wahrscheinlich korrekter:
Mit Ihrer std::multiplies
Version müssen Sie den Funktor nicht wirklich kopieren, sondern:
Oder C ++ 0x, zum Spaß:
%Vor%Die Semantik von For_each passt nicht zu dem, was Sie versuchen zu tun. akkumulieren tut genau das, was Sie versuchen, verwenden Sie stattdessen.