std::span<T,Extent>::subspan
From cppreference.com
| template< std::size_t Offset, std::size_t Count = std::dynamic_extent > |
(1) | |
| constexpr std::span<element_type, std::dynamic_extent> subspan( size_type Offset, |
(2) | |
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
-
Offsetis greater thanExtent, or -
Countis notstd::dynamic_extentandCountis greater thanExtent - Offset.
The behavior is undefined if either Offset or Count is out of range. This happens if
-
Offsetis greater thansize(), or -
Countis notstd::dynamic_extentandCountis greater thansize() - Offset.
The extent E of the span returned by (1) is determined as follows:
- If
Countis notstd::dynamic_extent,Count; - Otherwise, if
Extentis notstd::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
| 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) |