名前空間
変種
操作

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

From 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以降)

このspanのオフセット Offset から始まる Count 個の要素に対するビューとなるspanを取得します。Countstd::dynamic_extent の場合、subspanの要素数は size() - offset となります(つまり、*this の末尾までとなります)。

1) 次のいずれかの場合、ill-formed(コンパイルエラー)となります。
  • OffsetExtent より大きい場合、または
  • Countstd::dynamic_extent ではなく、かつ CountExtent - Offset より大きい場合。

Offset または Count が範囲外の場合、未定義の動作となります。これは次の場合に発生します。

  • Offsetsize() より大きい場合、または
  • Countstd::dynamic_extent ではなく、かつ Countsize() - Offset より大きい場合。

subspan() const; によって返されるspanのextent `E` は次のように決定されます。

  • Countstd::dynamic_extent でない場合: Count
  • それ以外の場合で、`Extent` が std::dynamic_extent でない場合: Extent - Offset
  • それ以外の場合: std::dynamic_extent

[編集] Return value

r.data() == this->data() + Offset となるような、要求されたsubspan `r` を返します。Countstd::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) [編集]
English 日本語 中文(简体) 中文(繁體)