std::span<T,Extent>::subspan
From 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のオフセット Offset から始まる Count 個の要素に対するビューとなるspanを取得します。Count が std::dynamic_extent の場合、subspanの要素数は size() - offset となります(つまり、*this の末尾までとなります)。
1) 次のいずれかの場合、ill-formed(コンパイルエラー)となります。
- Offset が Extent より大きい場合、または
- Count が std::dynamic_extent ではなく、かつ Count が Extent - Offset より大きい場合。
Offset または Count が範囲外の場合、未定義の動作となります。これは次の場合に発生します。
- Offset が size() より大きい場合、または
- Count が std::dynamic_extent ではなく、かつ Count が size() - Offset より大きい場合。
subspan() const; によって返されるspanのextent `E` は次のように決定されます。
- Count が std::dynamic_extent でない場合: Count。
- それ以外の場合で、`Extent` が std::dynamic_extent でない場合: Extent - Offset。
- それ以外の場合: std::dynamic_extent。
[編集] Return value
r.data() == this->data() + Offset となるような、要求されたsubspan `r` を返します。Count が std::dynamic_extent の場合、r.size() == this->size() - Offset となります。それ以外の場合は、r.size() == Count となります。
[編集] Example
このコードを実行
#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
[編集] See also
シーケンスの最初の N 個の要素からなるサブスパンを取得します(public member function) | |
シーケンスの最後の N 個の要素からなるサブスパンを取得します(public member function) |