Das clevere Design und die Mängel von C++'s std::adjacent_difference
Dieser Artikel untersucht die Designphilosophie des Algorithmus `std::adjacent_difference` in der C++-Standardbibliothek. Dieser Algorithmus berechnet die Differenzen zwischen benachbarten Elementen einer Eingabefolge und kopiert das erste Element in die Ausgabe. Dieses Design gewährleistet zwar die Symmetrie zu `std::partial_sum`, was die Ableitung und Integration in der Analysis widerspiegelt, begrenzt aber auch seine Generizität, da die Differenz zwischen Elementen eines beliebigen Typs einen anderen Typ haben kann. Der Artikel zieht weitere Parallelen zu Ableitungen und Integralen in der Analysis, erklärt die Designbegründung des Algorithmus und vergleicht ihn mit der flexibleren `deltas`-Funktion von Q. Die Schlussfolgerung lautet, dass, obwohl Stepanovs ursprüngliche Absicht gut gemeint war, der Algorithmus an Generizität mangelt; `pairwise_transform` aus C++23 bietet eine flexiblere Alternative.
Mehr lesen