std::span::subspan(3)

NAME
std::span::subspan - std::span::subspan

Synopsis
   template< std::size_t Offset,
   std::size_t Count = std::dynamic_extent > (1)
   constexpr std::span<element_type, E /* see below */> subspan() const;
   constexpr std::span<element_type, std::dynamic_extent>
   subspan( size_type Offset, (2)
   size_type Count = std::dynamic_extent ) const;
   Obtains a span that is a view over the Count elements of this span starting at
   offset Offset. If Count is std::dynamic_extent, the number of elements in the
   subspan is size() - offset (i.e., it ends at the end of *this.).
   (1) is ill-formed if
     * Offset is greater than Extent, or
     * Count is not std::dynamic_extent and Count is greater than Extent - Offset.
   The behavior is undefined if either Offset or Count is out of range. This happens if
     * Offset is greater than size(), or
     * Count is not std::dynamic_extent and Count is greater than size() - Offset.
   The extent E of the span returned by (1) is determined as follows:
     * If Count is not std::dynamic_extent, Count;
     * Otherwise, if Extent is not std::dynamic_extent, Extent - Offset;
     * Otherwise, std::dynamic_extent.

Return value
   The requested subspan r, such that r.data() == this->data() + Offset. If Count is
   std::dynamic_extent, r.size() == this->size() - Offset; otherwise r.size() == Count.

Example
// Run this code
 #include <algorithm>
 #include <cstdio>
 #include <numeric>
 #include <ranges>
 #include <span>
 void display(std::span<const char> abc)
 {
     const auto columns{ 20U };
     const auto rows{ abc.size() - columns + 1 };
     for (auto offset{ 0U }; offset < rows; ++offset) {
         std::ranges::for_each(
             abc.subspan(offset, columns),
             std::putchar
         );
         std::putchar('\n');
     }
 }
 int main()
 {
     char abc[26];
     std::iota(std::begin(abc), std::end(abc), 'A');
     display(abc);
 }

Output:
 ABCDEFGHIJKLMNOPQRST
 BCDEFGHIJKLMNOPQRSTU
 CDEFGHIJKLMNOPQRSTUV
 DEFGHIJKLMNOPQRSTUVW
 EFGHIJKLMNOPQRSTUVWX
 FGHIJKLMNOPQRSTUVWXY
 GHIJKLMNOPQRSTUVWXYZ

See also
   first obtains a subspan consisting of the first N elements of the sequence
         (public member function)
   last obtains a subspan consisting of the last N elements of the sequence
         (public member function)