algo/foldright.cpp

The following code example is taken from the book
C++23 - The Complete Guide by Nicolai M. Josuttis, Leanpub, 2026
The code is licensed under a Creative Commons Attribution 4.0 International License. Creative Commons License

// raw code

#include <print>
#include <vector>
#include <algorithm>

int main()
{
  // traced plus operator:
  auto plusTraced = [] (auto val1, auto val2) {
    auto sum = val1 + val2;
    std::println(" {} + {} => {}", val1, val2, sum);
    return sum;  
  };

  std::vector coll{1, 2, 3, 4};
  std::println("coll: {}", coll);
    
  // compute (((0 + E1) + E2) + E3) + ... :
  auto sum1 = std::ranges::fold_left(coll, 0, plusTraced);
  std::println("sum left:  {}", sum1);

  // compute ... + (En-2 + (En-1 + (En + 0))) :
  auto sum2 = std::ranges::fold_right(coll, 0, plusTraced);
  std::println("sum right: {}", sum2);
}