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 起) |
獲取一個 span,它是一個檢視,覆蓋從此 span 的偏移量 Offset 開始的 Count 個元素。如果 Count 是 std::dynamic_extent,則子 span 中的元素數量為 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) 返回的 span 的範圍 E
確定如下:
- 如果 Count 不是 std::dynamic_extent,則為 Count;
- 否則,如果
Extent
不是 std::dynamic_extent,則為 Extent - Offset; - 否則,為 std::dynamic_extent。
[edit] 返回值
請求的子 span r
,使得 r.data() == this->data() + Offset。如果 Count 是 std::dynamic_extent,則 r.size() == this->size() - Offset;否則 r.size() == Count。
[edit] 示例
執行此程式碼
#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
[edit] 另請參見
獲取由序列前 N 個元素組成的子 span(public 成員函式) | |
獲取由序列後 N 個元素組成的子 span(public 成員函式) |