Ranges are an abstraction that allows a C++ program
to operate on elements of data structures uniformly
. Calling
ranges::end on a range returns an object whose type
S,
together with the type
I of the object returned by
ranges::begin,
models
sentinel_for<S, I>. The library formalizes the interfaces, semantics, and complexity of ranges
to enable algorithms and range adaptors that work efficiently
on different types of sequences