跳到主要内容

std::span subspan() 方法

// (1) Const version only
template< std::size_t Offset,
std::size_t Count = std::dynamic_extent >
constexpr std::span<element_type, E /* see below */> subspan() const;

// (2) Const version only
constexpr std::span<element_type, std::dynamic_extent>
subspan( size_type Offset,
size_type Count = std::dynamic_extent ) const;

获取一个 span,它是此 span 从偏移量 Offset 开始的 Count 个元素的视图。

如果 Countstd::dynamic_extent,则子 span 中的元素数量为 size() - offset (即,它在 *this 的末尾结束)。

由 **(1)** 返回的 span 的范围 E 确定如下

重要

**(1)** 格式错误

如果

  • Offset > Extent,或
  • Count 不是 std::dynamic_extentCount > Extent - Offset
未定义行为

行为未定义

如果 OffsetCount 超出范围。

这发生在以下情况:

参数

  • (2)
    • Count - 要构成 span 的元素数量
    • Offset - 开始偏移量

返回值

一个 span s,它是 *this 的子 span Count 个元素的视图,具有以下属性:

  • s.data() == this->data() + Offset
  • 如果 Countstd::dynamic_extent
    • s.size() == this->size() - Offset
  • 否则
    • s.size() == Count

复杂度

常数 - O(1)

异常

(无)

示例

Main.cpp
#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
本文档源自此 CppReference 页面。它可能为了改进或编辑偏好而有所更改。点击“编辑此页面”查看本文档所做的所有更改。
悬停查看原始许可证。

std::span subspan() 方法

// (1) Const version only
template< std::size_t Offset,
std::size_t Count = std::dynamic_extent >
constexpr std::span<element_type, E /* see below */> subspan() const;

// (2) Const version only
constexpr std::span<element_type, std::dynamic_extent>
subspan( size_type Offset,
size_type Count = std::dynamic_extent ) const;

获取一个 span,它是此 span 从偏移量 Offset 开始的 Count 个元素的视图。

如果 Countstd::dynamic_extent,则子 span 中的元素数量为 size() - offset (即,它在 *this 的末尾结束)。

由 **(1)** 返回的 span 的范围 E 确定如下

重要

**(1)** 格式错误

如果

  • Offset > Extent,或
  • Count 不是 std::dynamic_extentCount > Extent - Offset
未定义行为

行为未定义

如果 OffsetCount 超出范围。

这发生在以下情况:

参数

  • (2)
    • Count - 要构成 span 的元素数量
    • Offset - 开始偏移量

返回值

一个 span s,它是 *this 的子 span Count 个元素的视图,具有以下属性:

  • s.data() == this->data() + Offset
  • 如果 Countstd::dynamic_extent
    • s.size() == this->size() - Offset
  • 否则
    • s.size() == Count

复杂度

常数 - O(1)

异常

(无)

示例

Main.cpp
#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
本文档源自此 CppReference 页面。它可能为了改进或编辑偏好而有所更改。点击“编辑此页面”查看本文档所做的所有更改。
悬停查看原始许可证。