命名空间
变体
操作

std::span<T,Extent>::subspan

来自 cppreference.com
< cpp‎ | container‎ | span
template< std::size_t Offset,

          std::size_t Count = std::dynamic_extent >
constexpr std::span<element_type, E /* see below */>

    subspan() const;
(1) (自 C++20 起)
constexpr std::span<element_type, std::dynamic_extent>

    subspan( size_type Offset,

             size_type Count = std::dynamic_extent ) const;
(2) (自 C++20 起)

获取一个跨度,它是一个对该跨度中从偏移量 Offset 开始的 Count 个元素的视图。如果 Countstd::dynamic_extent,则子跨度中的元素数量为 size() - offset(即它以 *this 的结尾结束)。

1) 如果以下情况成立,则格式错误
  • Offset 大于 Extent,或
  • Count 不是 std::dynamic_extentCount 大于 Extent - Offset

如果 OffsetCount 超出范围,则行为未定义。如果以下情况成立,则会发生这种情况

  • Offset 大于 size(),或
  • Count 不是 std::dynamic_extentCount 大于 size() - Offset

(1) 返回的跨度的范围 E 确定如下

  • 如果 Count 不是 std::dynamic_extent,则为 Count
  • 否则,如果 Extent 不是 std::dynamic_extent,则为 Extent - Offset
  • 否则,为 std::dynamic_extent

[编辑] 返回值

请求的子跨度 r,使得 r.data() == this->data() + Offset。如果 Countstd::dynamic_extent,则 r.size() == this->size() - Offset;否则 r.size() == Count

[编辑] 示例

#include <algorithm>
#include <cstdio>
#include <numeric>
#include <ranges>
#include <span>
 
void display(std::span<const char> abc)
{
    const auto columns{20U};
    const auto rows{abc.size() - columns + 1};
 
    for (auto offset{0U}; offset < rows; ++offset)
    {
        std::ranges::for_each(abc.subspan(offset, columns), std::putchar);
        std::putchar('\n');
    }
}
 
int main()
{
    char abc[26];
    std::iota(std::begin(abc), std::end(abc), 'A');
    display(abc);
}

输出

ABCDEFGHIJKLMNOPQRST
BCDEFGHIJKLMNOPQRSTU
CDEFGHIJKLMNOPQRSTUV
DEFGHIJKLMNOPQRSTUVW
EFGHIJKLMNOPQRSTUVWX
FGHIJKLMNOPQRSTUVWXY
GHIJKLMNOPQRSTUVWXYZ

[编辑] 另请参阅

获取一个子跨度,它包含序列中的前 N 个元素
(公共成员函数) [编辑]
获取一个子跨度,它包含序列中的最后 N 个元素
(公共成员函数) [编辑]