template< std::size_t Offset, std::size_t Count = std::dynamic_extent > constexpr std::span<element_type, E /* see below */> subspan() const; | (1) | (since C++20) |
constexpr std::span<element_type, std::dynamic_extent> subspan( size_type Offset, size_type Count = std::dynamic_extent ) const; | (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:
Count
is not std::dynamic_extent
, Count
; Extent
is not std::dynamic_extent
, Extent - Offset
; std::dynamic_extent
. 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
.
#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
(C++20) | obtains a subspan consisting of the first N elements of the sequence (public member function) |
(C++20) | obtains a subspan consisting of the last N elements of the sequence (public member function) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/container/span/subspan