Namespaces
Variants
Views
Actions

std::span

From cppreference.com
< cpp‎ | container
Defined in header <span>
template<

    class T,
    std::size_t Extent = std::dynamic_extent

> class span;
(since C++20)

The class template span describes an object that can refer to a contiguous sequence of objects with the first element of the sequence at position zero. A span can either have a static extent, in which case the number of elements in the sequence is known and encoded in the type, or a dynamic extent.

A typical implementation holds only two members: a pointer to T and a size.

Contents

[edit] Template parameters

T - element type; must be a complete type that is not an abstract class type
Extent - the number of elements in the sequence, or std::dynamic_extent if dynamic

[edit] Member types

Member type Definition
element_type T
value_type std::remove_cv_t<T>
size_type std::size_t
difference_type std::ptrdiff_t
pointer T*
const_pointer const T*
reference T&
const_reference const T&
iterator implementation-defined LegacyRandomAccessIterator, ConstexprIterator, and LegacyContiguousIterator whose value_type is value_type
reverse_iterator std::reverse_iterator<iterator>

Note: iterator is a mutable iterator if T is not const-qualified.

All requirements on the iterator types of a Container apply to the iterator type of span as well.

[edit] Member constant

static constexpr std::size_t extent = Extent;

[edit] Member functions

constructs a span
(public member function) [edit]
assigns a span
(public member function) [edit]
Iterators
returns an iterator to the beginning of the sequence
(public member function) [edit]
returns an iterator to the end of the sequence
(public member function) [edit]
returns a reverse iterator to the beginning of the sequence
(public member function) [edit]
returns a reverse iterator to the end of the sequence
(public member function) [edit]
Element access
access the first element
(public member function) [edit]
access the last element
(public member function) [edit]
accesses an element of the sequence
(public member function) [edit]
returns a pointer to the beginning of the sequence of elements
(public member function) [edit]
Observers
returns the number of elements in the sequence
(public member function) [edit]
returns the size of the sequence in bytes
(public member function) [edit]
checks if the sequence is empty
(public member function) [edit]
Subviews
obtains a subspan consisting of the first N elements of the sequence
(public member function) [edit]
obtains a subspan consisting of the last N elements of the sequence
(public member function) [edit]
obtains a subspan
(public member function) [edit]

[edit] Non-member functions

converts a span into a view of its underlying bytes
(function template) [edit]

[edit] Non-member constant

a constant of type size_t signifying that the span has dynamic extent
(constant) [edit]

[edit] Helper template

template<class T, std::size_t Extent>
inline constexpr bool ranges::enable_borrowed_range<std::span<T, Extent>> = true;

This specialization of std::ranges::enable_borrowed_range makes span satisfy borrowed_range.

template<class T, std::size_t Extent>

inline constexpr bool ranges::enable_view<std::span<T, Extent>> =

    Extent == 0 || Extent == dynamic_extent;

This specialization of std::ranges::enable_view makes span of zero or dynamic extent satisfy view. Spans of nonzero static extent are not default_initializable and therefore not views.

[edit] Deduction guides