...

/

Create Views into Containers with Ranges

Create Views into Containers with Ranges

Learn to create views into containers with ranges.

We'll cover the following...

The new ranges library is one of the more significant additions to C++20. It provides a new paradigm for filtering and processing containers. Ranges provide clean and intuitive building blocks for more effective and readable code.

Let's start by defining a few terms:

  • A range is a collection of objects which can be iterated. In other words, any structure that supports the begin() and end() iterators is a range. This includes most STL containers.

  • A view is a range that transforms another underlying range. Views are lazy, meaning they only operate as the range iterates. A view returns data from the underlying range and does not own any data itself. Views operate in O(1) constant time.

  • A view adapter is an object that takes a range and returns a view object. A view adapter may be chained with other view adapters using the | operator.

Note: The <ranges> library uses the std::ranges and the std::ranges::view namespaces. Recognizing that this is cumbersome, the standard includes an alias for std::ranges::view as the simply, std::view. This is still fairly cumbersome. For this recipe we will use the following aliases, to save space and because it is somewhat more elegant:

  • namespace ranges = std::ranges; // save the fingers!

  • namespace views = std::ranges::views;

This applies to all the code in this recipe.

...