C++ Ranges and Views

C++ ranges express operations over sequences, and views adapt a range lazily without usually owning or materializing a new collection. Views inherit lifetime and invalidation constraints from their underlying range.