std::span<T,Extent>::span
constexpr span() noexcept; |
(1) | |
template< class It > explicit(extent != std::dynamic_extent) constexpr span( It first, size_type count ); |
(2) | |
template< class It, class End > explicit(extent != std::dynamic_extent) constexpr span( It first, End last ); |
(3) | |
template< std::size_t N > constexpr span( element_type (&arr)[N] ) noexcept; |
(4) | |
template< class U, std::size_t N > constexpr span( std::array<U, N>& arr ) noexcept; |
(5) | |
template< class U, std::size_t N > constexpr span( const std::array<U, N>& arr ) noexcept; |
(6) | |
template< class R > explicit(extent != std::dynamic_extent) constexpr span( R&& range ); |
(7) | |
template< class U, std::size_t N > explicit(extent != std::dynamic_extent && N == std::dynamic_extent) constexpr span( const std::span<U, N>& source ) noexcept; |
(8) | |
constexpr span( const span& other ) noexcept = default; |
(9) |
Constructs a span
.
data() == nullptr
and
size() == 0
.
- This overload participates in overload resolution only if
extent == 0 || extent == std::dynamic_extent
.
[first, first + count)
; the resulting span has
data() == std::to_address(first)
and
size() == count
.
- The behavior is undefined if
[first, first + count)
is not a valid range, ifIt
does not actually modelcontiguous_iterator
, or ifextent != std::dynamic_extent && count != extent
. - This overload participates in overload resolution only if
-
It
satisfiescontiguous_iterator
- the conversion from
std::iter_reference_t<It>
toelement_type
is at most a qualification conversion.
[first, last)
; the resulting span has
data() == std::to_address(first)
and
size() == last-first
.
- The behavior is undefined if
[first, last)
is not a valid range, ifIt
does not actually modelcontiguous_iterator
, ifEnd
does not actually modelsized_sentinel_for
forIt
, or ifextent != std::dynamic_extent && last-first != extent
. - This overload participates in overload resolution only if
-
It
satisfiescontiguous_iterator
, -
End
satisfiessized_sentinel_for
forIt
, - the conversion from
std::iter_reference_t<It>
toelement_type
is at most a qualification conversion, and -
std::is_convertible_v<End, std::size_t>
isfalse
.
arr
; the resulting span has
size() == N
and
data() == std::data(arr)
.
- These overloads participate in overload resolution only if
extent == std::dynamic_extent || N == extent
istrue
and the conversion fromstd::remove_pointer_t<decltype(data(arr))>
toelement_type
is at most a qualification conversion. These constructor templates are never used for class template argument deduction.
range
; the resulting span has
size() == std::ranges::size(range)
and
data() == std::ranges::data(range)
.
- The behavior is undefined if
R
does not actually modelcontiguous_range
andsized_range
or ifR
does not modelborrowed_range
whileelement_type
is non-const or bothextent != dynamic_extent
andstd::ranges::size(range) != extent
aretrue
. - This overload participates in overload resolution only if
-
R
satisfiescontiguous_range
andsized_range
, - either
R
satisfiesborrowed_range
orstd::is_const_v<element_type>
istrue
-
std::remove_cvref_t<R>
is not a specialization ofstd::span
, -
std::remove_cvref_t<R>
is not a specialization ofstd::array
-
std::is_array_v<std::remove_cvref_t<R>>
is false, and - the conversion from
std::ranges::range_reference_t<R>
toelement_type
is at most a qualification conversion.
source
; the resulting span has
size() == source.size()
and
data() == source.data()
.
- The behavior is undefined if both
extent != dynamic_extent
andsource.size() != extent
aretrue
. - This overload participates in overload resolution only if at least one of
extent == std::dynamic_extent
,N == std::dynamic_extent
andN == extent
istrue
and the conversion fromU
toelement_type
is at most a qualification conversion.
9) Defaulted copy constructor copies the size and data pointer; the resulting span has
size() == other.size()
and
data() == other.data()
.
Parameters
first | - | iterator to the first element of the sequence |
count | - | number of elements in the sequence |
last | - | iterator past the last element of the sequence or another sentinel |
arr | - | array to construct a view for |
range | - | range to construct a view for |
source | - | another span to convert from |
other | - | another span to copy from |
Exceptions
2) Throws nothing.
3) Throws what and when
last - first
throws.
See also
returns a pointer to the beginning of the sequence of elements (public member function) |
|
returns the number of elements in the sequence (public member function) |
|
assigns a span (public member function) |
|
(C++17)(C++20)
|
returns the size of a container or array (function template) |
(C++17)
|
obtains the pointer to the underlying array (function template) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/container/span/span