21 Containers library [containers]

21.7 Views [views]

21.7.3 Class template span [views.span]

21.7.3.3 Subviews [span.sub]

template<ptrdiff_t Count> constexpr span<element_type, Count> first() const;
Requires: 0 <= Count && Count <= size().
Effects: Equivalent to: return {data(), Count};
template<ptrdiff_t Count> constexpr span<element_type, Count> last() const;
Requires: 0 <= Count && Count <= size().
Effects: Equivalent to: return {data() + (size() - Count), Count};
template<ptrdiff_t Offset, ptrdiff_t Count = dynamic_extent> constexpr span<element_type, see below> subspan() const;
Requires:
(0 <= Offset && Offset <= size())
&& (Count == dynamic_extent || Count >= 0 && Offset + Count <= size())
Effects: Equivalent to:
return span<ElementType, see below>(
  data() + Offset, Count != dynamic_extent ? Count : size() - Offset);
Remarks: The second template argument of the returned span type is:
Count != dynamic_extent ? Count
                        : (Extent != dynamic_extent ? Extent - Offset
                                                    : dynamic_extent)
constexpr span<element_type, dynamic_extent> first(index_type count) const;
Requires: 0 <= count && count <= size().
Effects: Equivalent to: return {data(), count};
constexpr span<element_type, dynamic_extent> last(index_type count) const;
Requires: 0 <= count 0 && count <= size().
Effects: Equivalent to: return {data() + (size() - count), count};
constexpr span<element_type, dynamic_extent> subspan( index_type offset, index_type count = dynamic_extent) const;
Requires:
(0 <= offset && offset <= size())
&& (count == dynamic_extent || count >= 0 && offset + count <= size())
Effects: Equivalent to:
return {data() + offset, count == dynamic_extent ? size() - offset : count};