跳到主要内容
注意

请注意,本文尚未完成!您可以通过编辑此文档页面来提供帮助。

Span 类参考

概述

template< class T, /* ... */ >
class span;

std::span 是一个动态或静态连续容器的视图。

内存

重要

本节需要改进。您可以通过编辑此文档页面来帮助我们。

技术细节

技术细节

类模板 span 描述了一个对象,该对象可以引用一个连续的对象序列,序列的第一个元素位于位置零。

span 可以拥有

  • 静态范围,在这种情况下

    • 序列中的元素数量在编译时已知并编码在类型中
    • 典型的实现可能只有一个成员 - 指向 T 的指针
  • 动态范围,在这种情况下

    • 元素数量在编译时未知,并且可以在运行时更改
    • 典型的实现包含两个成员 - 指向 T 的指针和大小
命名要求

std::span 满足以下要求

特性测试宏
重要

本节需要改进。您可以通过编辑此文档页面来帮助我们。

std::span

定义于span

模板参数

pubT

元素的类型。

pubExtent

容器中的元素数量,如果为动态则为std::dynamic_extent

类型名称

pubelement_typeT
pubvalue_typestd::remove_cv_t<T>
pubsize_type无符号整型(通常是std::size_t
pubdifference_type有符号整型(通常是std::ptrdiff_t
pubpointerT*
pubconst_pointerconst T*
pubreferenceT&
pubconst_referenceconst T&
pubiterator

实现定义的 LegacyRandomAccessIteratorConstexprIteratorcontiguous_iteratorvalue_type

pubreverse_iteratorstd::reverse_iterator<iterator>

成员函数

pub(构造函数)

构造一个 span。

pub(析构函数)

销毁 span。

puboperator=

将值分配给容器。

元素访问

pubfront

返回第一个元素。

pub末尾

返回最后一个元素。

puboperator[]

访问指定元素。

pub数据

返回指向底层数组第一个元素的指针。

迭代器

pubbegin

返回指向起始元素的iterator/const_iterator

pubend

返回指向结束元素的iterator/const_iterator

pubrbegin

返回一个反向 iterator/const_iterator 指向起始位置。

pubrend

返回一个反向 iterator/const_iterator 指向结束位置。

观察器

pubsize

返回元素数量。

pubsize_bytes

返回最大可能的元素数量。

pubempty

如果 span 为空,则返回 true,否则返回 false

子视图

pubfirst

清空内容。

publast

插入元素。

pubsubspan

移除元素。

常量

static constexpr std::size_t extent = Extent;

非成员函数

pubas_bytes
as_writable_bytes

按字典顺序比较 span 中的值。

非成员常量

pubstd::dynamic_extent

一个 std::size_t 类型的常量,表示 span 具有动态范围。

辅助模板

template<class T, std::size_t Extent>
inline constexpr bool ranges::enable_borrowed_range<std::span<T, Extent>> = true;

ranges::enable_borrowed_range 特化使 span 满足 borrowed_range

template<class T, std::size_t Extent>
inline constexpr bool ranges::enable_view<std::span<T, Extent>> = true;

ranges::enable_view 特化使 span 满足 view

推导指南 (C++17 起)

点击展开

推导指南

// (1)
template <class It, class EndOrSize>
span(It, EndOrSize) -> span<std::remove_reference_t<std::iter_reference_t<It>>>;

(1) 允许从迭代器-哨兵对推导元素类型。

// (2)
template<class T, std::size_t N>
span(T (&)[N]) -> span<T, N>;

// (3)
template<class T, std::size_t N>
span(std::array<T, N>&) -> span<T, N>;

// (4)
template<class T, std::size_t N>
span(const std::array<T, N>&) -> span<const T, N>;

(2 - 4) 允许从内置数组和 std::array 推导静态范围

// (5)
template<class R>
span(R&&) -> span<std::remove_reference_t<std::ranges::range_reference_t<R>>>;

(5) 允许从范围推导元素类型。

重载决议

为了使任何推导指南参与重载决议,必须满足以下要求

示例

重要

本节需要改进。您可以通过编辑此文档页面来帮助我们。

本文源自此 CppReference 页面。它可能为了改进或编辑者的偏好而进行了修改。点击“编辑此页面”查看本文档的所有更改。
悬停查看原始许可证。
注意

请注意,本文尚未完成!您可以通过编辑此文档页面来提供帮助。

Span 类参考

概述

template< class T, /* ... */ >
class span;

std::span 是一个动态或静态连续容器的视图。

内存

重要

本节需要改进。您可以通过编辑此文档页面来帮助我们。

技术细节

技术细节

类模板 span 描述了一个对象,该对象可以引用一个连续的对象序列,序列的第一个元素位于位置零。

span 可以拥有

  • 静态范围,在这种情况下

    • 序列中的元素数量在编译时已知并编码在类型中
    • 典型的实现可能只有一个成员 - 指向 T 的指针
  • 动态范围,在这种情况下

    • 元素数量在编译时未知,并且可以在运行时更改
    • 典型的实现包含两个成员 - 指向 T 的指针和大小
命名要求

std::span 满足以下要求

特性测试宏
重要

本节需要改进。您可以通过编辑此文档页面来帮助我们。

std::span

定义于span

模板参数

pubT

元素的类型。

pubExtent

容器中的元素数量,如果为动态则为std::dynamic_extent

类型名称

pubelement_typeT
pubvalue_typestd::remove_cv_t<T>
pubsize_type无符号整型(通常是std::size_t
pubdifference_type有符号整型(通常是std::ptrdiff_t
pubpointerT*
pubconst_pointerconst T*
pubreferenceT&
pubconst_referenceconst T&
pubiterator

实现定义的 LegacyRandomAccessIteratorConstexprIteratorcontiguous_iteratorvalue_type

pubreverse_iteratorstd::reverse_iterator<iterator>

成员函数

pub(构造函数)

构造一个 span。

pub(析构函数)

销毁 span。

puboperator=

将值分配给容器。

元素访问

pubfront

返回第一个元素。

pub末尾

返回最后一个元素。

puboperator[]

访问指定元素。

pub数据

返回指向底层数组第一个元素的指针。

迭代器

pubbegin

返回指向起始元素的iterator/const_iterator

pubend

返回指向结束元素的iterator/const_iterator

pubrbegin

返回一个反向 iterator/const_iterator 指向起始位置。

pubrend

返回一个反向 iterator/const_iterator 指向结束位置。

观察器

pubsize

返回元素数量。

pubsize_bytes

返回最大可能的元素数量。

pubempty

如果 span 为空,则返回 true,否则返回 false

子视图

pubfirst

清空内容。

publast

插入元素。

pubsubspan

移除元素。

常量

static constexpr std::size_t extent = Extent;

非成员函数

pubas_bytes
as_writable_bytes

按字典顺序比较 span 中的值。

非成员常量

pubstd::dynamic_extent

一个 std::size_t 类型的常量,表示 span 具有动态范围。

辅助模板

template<class T, std::size_t Extent>
inline constexpr bool ranges::enable_borrowed_range<std::span<T, Extent>> = true;

ranges::enable_borrowed_range 特化使 span 满足 borrowed_range

template<class T, std::size_t Extent>
inline constexpr bool ranges::enable_view<std::span<T, Extent>> = true;

ranges::enable_view 特化使 span 满足 view

推导指南 (C++17 起)

点击展开

推导指南

// (1)
template <class It, class EndOrSize>
span(It, EndOrSize) -> span<std::remove_reference_t<std::iter_reference_t<It>>>;

(1) 允许从迭代器-哨兵对推导元素类型。

// (2)
template<class T, std::size_t N>
span(T (&)[N]) -> span<T, N>;

// (3)
template<class T, std::size_t N>
span(std::array<T, N>&) -> span<T, N>;

// (4)
template<class T, std::size_t N>
span(const std::array<T, N>&) -> span<const T, N>;

(2 - 4) 允许从内置数组和 std::array 推导静态范围

// (5)
template<class R>
span(R&&) -> span<std::remove_reference_t<std::ranges::range_reference_t<R>>>;

(5) 允许从范围推导元素类型。

重载决议

为了使任何推导指南参与重载决议,必须满足以下要求

示例

重要

本节需要改进。您可以通过编辑此文档页面来帮助我们。

本文源自此 CppReference 页面。它可能为了改进或编辑者的偏好而进行了修改。点击“编辑此页面”查看本文档的所有更改。
悬停查看原始许可证。