std::span subspan() method
- od C++20
// (1) Const version onlytemplate< std::size_t Offset, std::size_t Count = std::dynamic_extent >constexpr std::span<element_type, E /* see below */> subspan() const;// (2) Const version onlyconstexpr std::span<element_type, std::dynamic_extent> subspan( size_type Offset, 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).
The extent E of the span returned by (1) is determined as follows:
- If
Countis not std::dynamic_extent -Count; - Otherwise, if
Extentis notstd::dynamic_extent-Extent - Offset; - Otherwise -
std::dynamic_extent.
(1) is ill-formed
if:Offset > Extent, orCountis notstd::dynamic_extentandCount > Extent - Offset.
The behavior is undefined
if eitherOffset or Count is out of range.This happens if:
Offsetis greater thansize(), orCountis notstd::dynamic_extentandCountis greater thansize() - Offset
Parameters
- (2)
Count- the number of the elements to make a span ofOffset- offset to start from
Return value
A span s that is a view over the subspan Count elements of *this, with the following properties:
s.data() == this->data() + Offset
and- If
Countisstd::dynamic_extent:s.size() == this->size() - Offset
- Otherwise
s.size() == Count
Complexity
Constant - O(1).
Exceptions
(none)
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);}ABCDEFGHIJKLMNOPQRSTBCDEFGHIJKLMNOPQRSTUCDEFGHIJKLMNOPQRSTUVDEFGHIJKLMNOPQRSTUVWEFGHIJKLMNOPQRSTUVWXFGHIJKLMNOPQRSTUVWXYGHIJKLMNOPQRSTUVWXYZHover to see the original license.