Namespaces
Variants
Views
Actions

Difference between revisions of "cpp/container/span"

From cppreference.com
< cpp‎ | container
(Member functions: ~)
m (Helper templates: plural)
Line 83: Line 83:
 
{{dsc end}}
 
{{dsc end}}
  
===Helper template===
+
===Helper templates===
 
{{ddcl|1=
 
{{ddcl|1=
 
template<class T, std::size_t Extent>
 
template<class T, std::size_t Extent>

Revision as of 23:58, 21 June 2020

 
 
 
 
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

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

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.

Member constant

static constexpr std::size_t extent = Extent;

Member functions

orphaned, replaced with Template:cpp/container/dsc operator_at. orphaned, replaced with Template:cpp/container/dsc data.
constructs a span
(public member function) [edit]
assigns a span
(public member function) [edit]
Iterators
returns an iterator to the beginning
(public member function) [edit]
(C++23)
returns an iterator to the end
(public member function) [edit]
returns a reverse iterator to the beginning
(public member function) [edit]
(C++23)
returns a reverse iterator to the end
(public member function) [edit]
Element access
access the first element
(public member function) [edit]
access the last element
(public member function) [edit]
Observers
(C++20)
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]

Non-member functions

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

Non-member constant

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

Helper templates

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.

Deduction guides