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_extent if 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_type is value_type
 | 
  const_iterator
 | 
  implementation-defined constant LegacyRandomAccessIterator, ConstexprIterator, and LegacyContiguousIterator whose value_type is value_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 span into 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_t signifying that the span has 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)  |