std::span<T,Extent>::span_C++中文网

constexpr span() noexcept;

(1)

template <class It>
constexpr span(It first, size_type count);

(2)

template <class It, class End>
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>
constexpr span(R&& r);

(7)

template <class U, std::size_t N>
constexpr span(const std::span<U, N>& s) noexcept;

(8)

constexpr span(const span& other) noexcept = default;

(9)

构造 span

1) 构造空 span 使其 data() == nullptrsize() == 0 。此重载仅若extent == 0 || extent == std::dynamic_extent才参与重载决议。

2) 构造作为范围 [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 的转换至多为限定转换才参与重载决议。

4-6) 构造作为数组 arr 上的视图的 span ;产生的 span 有 size() == Ndata() == std::data(arr) 。这些重载仅若extent == std::dynamic_extent || N == extenttruestd::remove_pointer_t<decltype(std::data(arr))>(*)[] 可转换到 element_type (*)[] 才参与重载决议。这些构造函数模板决不用于类模板实参推导。

8) 从另一 span s 的转换构造函数;产生的 span 有 size() == s.size()data() == s.data() 。此重载仅若extent == std::dynamic_extent || N == extenttrueU (*)[] 可转换为 element_type (*)[] 才参与重载决议。

9) 默认化的赋值构造函数复制大小与数据指针;产生的 span 有 size() == other.size()data() == other.data()

参数

first - 指向序列首元素的迭代器
count - 序列的元素数
last - 指向序列末元素后一位置的迭代器或另一哨位
arr - 用于构造视图的数组
r - 用于构造视图的范围
s - 要转换的另一 span
other - 要复制的另一 span

异常

2) 不抛出。

3) 在抛出时 last - first 抛出其所抛出的异常。

7)std::ranges::size(r)std::ranges::data(r) 抛出时抛出其所抛出的异常。

参阅

返回指向元素序列起始的指针
(公开成员函数)
返回序列中的元素数
(公开成员函数)
赋值 span
(公开成员函数)
返回容器或数组的大小
(函数模板)
获得指向底层数组的指针
(函数模板)