std::span<T,Extent>::subspan
template
<
std::size_t Offset,
std::size_t Count =
std::dynamic_extent
>
|
(1) | (since C++20) |
constexpr
std::span
<element_type, std::dynamic_extent
>
subspan( size_type Offset, |
(2) | (since C++20) |
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
- 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(
)
+
. If Count is std::dynamic_extent,
r.size
(
)
== this-
>size(
)
-
; otherwise r.size() == Count
Example
#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) |