std::span<T,Extent>::span
constexpr
span()
noexcept;
|
(1) | |
template<
class
It >
explicit(extent
!=
std::dynamic_extent) |
(2) | |
template<
class
It, class
End >
explicit(extent
!=
std::dynamic_extent) |
(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) |
(7) | |
template<
class
U, std::size_t
N >
explicit(extent
!=
std::dynamic_extent
&&
N ==
std::dynamic_extent) |
(8) | |
constexpr
span(
const
span&
other )
noexcept
= default;
|
(9) | |
构造 span
。
- 此重载只有在extent == 0 || extent == std::dynamic_extent时才会参与重载决议。
[first, first + count)
上的视图的 span ;产生的 span 有 data()
== std::to_address(first) 与 size()
== count 。
- 若
[first, first + count)
不是合法范围,若It
不实际实现contiguous_iterator
或若 extent != std::dynamic_extent && count != extent 则行为未定义。这些重载只有在
-
It
满足contiguous_iterator
- 从 std::iter_reference_t<It> 到 element_type 的转换至多为限定转换
[first, last)
上的视图的 span ;产生的 span 有 data()
== std::to_address(first) 与 size()
== last-first 。若
[first, last)
不是合法范围,若 It
不实际实现 contiguous_iterator
,若 End
不实际实现 It
的 sized_sentinel_for
,或若 extent !=
std::dynamic_extent && last-first !=
extent 则行为未定义。
- 此重载只有在
-
-
It
满足contiguous_iterator
, -
End
满足It
的sized_sentinel_for
, - 从 std::iter_reference_t<It> 到 element_type 的转换至多为限定转换,且
- std::is_convertible_v<End, std::size_t> 为 false
-
arr
上的视图的
span ;产生的 span 有 size()
== N 与 data()
== std::data(arr) 。
- 这些重载只有在extent == std::dynamic_extent || N == extent 为 true 且从 std::remove_pointer_t<decltype(std::data(arr))> 到 element_type 的转换至多为限定转换时才会参与重载决议。这些构造函数模板决不用于类模板实参推导。
range
上的视图的
span ;产生的 span 有 size()
== std::ranges::size(r) 与 data()
== std::ranges::data(range) 。
- 若
R
不实际实现contiguous_range
与sized_range
或当 element_type 为非 const 时R
不实际实现borrowed_range
或 extent != dynamic_extent 与 std::ranges::size(range) != extent 均为 true 则行为未定义。 - 此重载只有在
-
- extent == dynamic_extent ;
-
R
满足contiguous_range
与sized_range
, -
R
满足borrowed_range
或 std::is_const_v<element_type> 为 true - std::remove_cvref_t<R>
不是
std::span
的特化, - std::remove_cvref_t<R> 不是 std::array 的特化,
- std::is_array_v<std::remove_cvref_t<R>> 为 false ,且
- 从 std::ranges::range_reference_t<R> 到 element_type 的转换至多为限定转换
source
的转换构造函数;产生的 span 有 size()
== source.size() 与 data()
== source.data() 。
- 若 extent != dynamic_extent 与 source.size() != extent 均为 true 则行为未定义。
- 此重载只有在extent
== std::dynamic_extent
、 N == std::dynamic_extent
与 N ==
extent 至少一者为 true
且从
U
到 element_type 的转换至多为限定转换时才会参与重载决议。
参数
first | - | 指向序列首元素的迭代器 |
count | - | 序列的元素数 |
last | - | 指向序列末元素后一位置的迭代器或另一哨位 |
arr | - | 用于构造视图的数组 |
range | - | 用于构造视图的范围 |
source | - | 要转换的另一 span |
other | - | 要复制的另一 span |
异常
参阅
返回指向元素序列起始的指针 (公开成员函数) |
|
返回序列中的元素数 (公开成员函数) |
|
赋值 span (公开成员函数) |
|
(C++17)(C++20)
|
返回容器或数组的大小 (函数模板) |
(C++17)
|
获得指向底层数组的指针 (函数模板) |