Using constrained algorithms
The C++ standard library features over 100 generic-purpose algorithms (most of them in the <algorithm>
header, and some of them in the <numeric>
header). Some of these algorithms we saw in Chapter 5, over the course of several recipes, when we learned how to search elements in a range, sort a range, initialize a range, and more. The generic aspect of algorithms comes from the fact they work with iterators (a beginning and end iterator to a sequence of elements–a range) but this has the downside of requiring more explicit code that needs to be repeated over and over again. To ease the use of these algorithms, the C++20 standard provides matching algorithms in the std::ranges
namespace that work with ranges (but also have overloads for iterators). These algorithms from the ranges library are called constrained algorithms and are available in the <algorithm>
header. Although it’s not possible to look at all of them here, in...