std::span
From cppreference.com
                    
                                        
                    
                    
                                                            
                    | Defined in header  <span> | ||
| template<      class T,  | (since C++20) | |
The class template span describes an object that can refer to a contiguous sequence of objects with the first element of the sequence at position zero. A span can either have a static extent, in which case the number of elements in the sequence is known and encoded in the type, or a dynamic extent.
A typical implementation holds only two members: a pointer to T and a size.
Template parameters
| T | - | element type; must be a complete type that is not an abstract class type | 
| Extent | - | the number of elements in the sequence, or std::dynamic_extentif dynamic | 
Member types
| Member type | Definition | 
| element_type | T | 
| value_type | std::remove_cv_t<T> | 
| index_type | std::size_t | 
| difference_type | std::ptrdiff_t | 
| pointer | T* | 
| const_pointer | const T* | 
| reference | T& | 
| const_reference | const T& | 
| iterator | implementation-defined LegacyRandomAccessIterator, ConstexprIterator, and LegacyContiguousIterator whose value_typeisvalue_type | 
| const_iterator | implementation-defined constant LegacyRandomAccessIterator, ConstexprIterator, and LegacyContiguousIterator whose value_typeisvalue_type | 
| reverse_iterator | std::reverse_iterator<iterator> | 
| const_reverse_iterator | std::reverse_iterator<const_iterator> | 
Note: iterator is a mutable iterator if T is not const-qualified.
All requirements on the iterator types of a Container applies to the iterator and const_iterator types of span as well.
Member constant
| static constexpr std::size_t extent = Extent; | ||
Member functions
| constructs a  span(public member function) | |
| assigns a span(public member function) | |
| Iterators | |
| returns an iterator to the beginning of the sequence (public member function) | |
| returns an iterator to the end of the sequence (public member function) | |
| returns a reverse iterator to the beginning of the sequence (public member function) | |
| returns a reverse iterator to the end of the sequence (public member function) | |
| Element access | |
| access the first element (public member function) | |
| access the last element (public member function) | |
| accesses an element of the sequence (public member function) | |
| returns a pointer to the beginning of the sequence of elements (public member function) | |
| Observers | |
| returns the number of elements in the sequence (public member function) | |
| returns the size of the sequence in bytes (public member function) | |
| checks if the sequence is empty (public member function) | |
| Subviews | |
| obtains a subspan consisting of the first N elements of the sequence (public member function) | |
| obtains a subspan consisting of the last N elements of the sequence (public member function) | |
| obtains a subspan (public member function) | |
Non-member functions
| returns iterators to the beginning and the end of the span (function) | |
| converts a spaninto a view of its underlying bytes(function template) | |
| accesses an element of a static-extent span(function template) | 
Non-member constant
| (C++20) | a constant of type size_tsignifying that thespanhas dynamic extent(constant) | 
Helper classes
| obtains the size of a static-extent span(class template specialization) | |
| obtains the type of the elements of a static-extent span(class template specialization) |