Implementing higher-order functions map and fold

Throughout the preceding recipes in this book, we have used the general purpose algorithms std::transform() and std::accumulate() in several examples, such as implementing string utilities to create uppercase or lowercase copies of a string or summing the values of a range. These are basically implementations of higher-order functions, map and fold. A higher-order function is a function that takes one or more other functions as arguments and applies them to a range (a list, vector, map, tree, and so on), producing either a new range or a value. In this recipe, we will see how to implement map and fold functions to work with C++ standard containers.