Spec-Zone.ru › C++

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

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, представляющий собой представление над Count элементами данного span, начиная с смещения Offset. Если 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.

Размер E возвращаемого span определяется следующим образом:

  • Если Count не равно std::dynamic_extent, Count;
  • В противном случае, если Extent не равно std::dynamic_extent, Extent - Offset;
  • В противном случае, std::dynamic_extent.

Возвращаемое значение

Запрошенная под-span 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

См. также

first
получает под-span, состоящий из первых N элементов последовательности
(публичный член-функция)
last
получает под-span, состоящий из последних N элементов последовательности
(публичный член-функция)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/container/span/subspan

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API