std::span<T,Extent>::subspan
来自 cppreference.com
template< std::size_t Offset, std::size_t Count = std::dynamic_extent > |
(1) | (自 C++20 起) |
constexpr std::span<element_type, std::dynamic_extent> subspan( size_type Offset, |
(2) | (自 C++20 起) |
获取一个跨度,它是一个对该跨度中从偏移量 Offset 开始的 Count 个元素的视图。如果 Count 是 std::dynamic_extent,则子跨度中的元素数量为 size() - offset(即它以 *this 的结尾结束)。
1) 如果以下情况成立,则格式错误
- Offset 大于 Extent,或
- Count 不是 std::dynamic_extent 且 Count 大于 Extent - Offset。
如果 Offset 或 Count 超出范围,则行为未定义。如果以下情况成立,则会发生这种情况
- Offset 大于 size(),或
- Count 不是 std::dynamic_extent 且 Count 大于 size() - Offset。
由 (1) 返回的跨度的范围 E
确定如下
- 如果 Count 不是 std::dynamic_extent,则为 Count;
- 否则,如果
Extent
不是 std::dynamic_extent,则为 Extent - Offset; - 否则,为 std::dynamic_extent。
[编辑] 返回值
请求的子跨度 r
,使得 r.data() == this->data() + Offset。如果 Count 是 std::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 个元素(公共成员函数) |