std::span<T,Extent>:: span
|
constexpr
span
(
)
noexcept
;
|
(1) | (since C++20) |
|
template
<
class
It
>
explicit
(
extent
!
=
std::
dynamic_extent
)
|
(2) | (since C++20) |
|
template
<
class
It,
class
End
>
explicit
(
extent
!
=
std::
dynamic_extent
)
|
(3) | (since C++20) |
|
template
<
std::
size_t
N
>
constexpr span ( std:: type_identity_t < element_type > ( & arr ) [ N ] ) noexcept ; |
(4) | (since C++20) |
|
template
<
class
U,
std::
size_t
N
>
constexpr span ( std:: array < U, N > & arr ) noexcept ; |
(5) | (since C++20) |
|
template
<
class
U,
std::
size_t
N
>
constexpr span ( const std:: array < U, N > & arr ) noexcept ; |
(6) | (since C++20) |
|
template
<
class
R
>
explicit
(
extent
!
=
std::
dynamic_extent
)
|
(7) | (since C++20) |
|
explicit
(
extent
!
=
std::
dynamic_extent
)
constexpr span ( std:: initializer_list < value_type > il ) noexcept ; |
(8) | (since C++26) |
|
template
<
class
U,
std::
size_t
N
>
explicit
(
extent
!
=
std::
dynamic_extent
&&
N
==
std::
dynamic_extent
)
|
(9) | (since C++20) |
|
constexpr
span
(
const
span
&
other
)
noexcept
=
default
;
|
(10) | (since C++20) |
Constructs a
span
.
- 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, ifItdoes not actually modelcontiguous_iterator, or if extent ! = std:: dynamic_extent && count ! = extent . - This overload participates in overload resolution only if
-
-
Itsatisfiescontiguous_iterator, - the conversion from std:: iter_reference_t < It > to element_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, ifItdoes not actually modelcontiguous_iterator, ifEnddoes not actually modelsized_sentinel_forforIt, or if extent ! = std:: dynamic_extent && last - first ! = extent . - This overload participates in overload resolution only if
-
-
Itsatisfiescontiguous_iterator, -
Endsatisfiessized_sentinel_forforIt, - the conversion from std:: iter_reference_t < It > to element_type is at most a qualification conversion, and
- std:: is_convertible_v < End, std:: size_t > is false .
-
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 is true and the conversion from std:: remove_pointer_t < decltype ( data ( arr ) ) > to element_type is at most a qualification conversion.
-
The behavior is undefined if
Rdoes not actually modelcontiguous_rangeandsized_rangeor ifRdoes not modelborrowed_rangewhile element_type is non-const or both extent ! = dynamic_extent and std :: ranges:: size ( range ) ! = extent are true . - This overload participates in overload resolution only if
-
-
Rsatisfiescontiguous_rangeandsized_range, -
either
Rsatisfiesborrowed_rangeor std:: is_const_v < element_type > is true , -
std::
remove_cvref_t
<
R
>
is not a specialization of
std::span, - std:: remove_cvref_t < R > is not a specialization of std::array ,
- std:: is_array_v < std:: remove_cvref_t < R >> is false, and
- the conversion from std :: ranges:: range_reference_t < R > to element_type is at most a qualification conversion.
-
il
; the resulting span has
size
(
)
==
il.
size
(
)
and
data
(
)
==
il.
begin
(
)
.
- The behavior is undefined if both extent ! = dynamic_extent and il. size ( ) ! = extent are true .
- This overload participates in overload resolution only if std:: is_const_v < element_type > is true .
source
; the resulting span has
size
(
)
==
source.
size
(
)
and
data
(
)
==
source.
data
(
)
.
- The behavior is undefined if both extent ! = dynamic_extent and source. size ( ) ! = extent are true .
-
This overload participates in overload resolution only if at least one of
extent
==
std::
dynamic_extent
,
N
==
std::
dynamic_extent
and
N
==
extent
is
true
and the conversion from
Uto element_type is at most a qualification conversion.
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
Notes
| Feature-test macro | Value | Std | Feature |
|---|---|---|---|
__cpp_lib_span_initializer_list
|
202311L | (C++26) |
Constructing
std::span
from a
std::initializer_list
,
(
8
)
|
Example
#include <array> #include <iostream> #include <span> #include <vector> void print_span(std::span<const int> s) { for (int n : s) std::cout << n << ' '; std::cout << '\n'; } int main() { int c[]{1, 2, 3}; print_span(c); // constructs from array std::array a{4, 5, 6}; print_span(a); // constructs from std::array std::vector v{7, 8, 9}; print_span(v); // constructs from std::vector #if __cpp_lib_span_initializer_list print_span({0, 1, 2}); // constructs from initializer_list #else print_span({{0, 1, 2}}); // ditto, a workaround #endif }
Output:
1 2 3 4 5 6 7 8 9 0 1 2
See also
|
direct access to the underlying contiguous storage
(public member function) |
|
|
returns the number of elements
(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) |