Namespaces
Variants

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

From cppreference.net
template < std:: size_t Offset,

std:: size_t Count = std:: dynamic_extent >
constexpr std:: span < element_type, /* ver más abajo */ >

subspan ( ) const ;
(1) (desde C++20)
constexpr std:: span < element_type, std:: dynamic_extent >

subspan ( size_type offset,

size_type count = std:: dynamic_extent ) const ;
(2) (desde C++20)

Obtiene una subvista sobre algunos elementos consecutivos de este span, los elementos a incluir se determinan mediante un recuento de elementos y un desplazamiento.

1) El recuento de elementos y el desplazamiento se proporcionan como argumentos de plantilla, y la subvista tiene una extensión dinámica solo si tanto Count como Offset son std:: dynamic_extent .
  • Si Count es std:: dynamic_extent , la subvista contiene todos los elementos a partir del Offset ésimo .
  • De lo contrario, la subvista contiene Count elementos a partir del Offset ésimo .
Denote el segundo argumento de plantilla del tipo de retorno como FinalExtent , se define como Count ! = std:: dynamic_extent
? Count
: ( Extent ! = std:: dynamic_extent
? Extent - Offset
: std:: dynamic_extent )
.
Si Offset <= Extent && ( Count == std:: dynamic_extent || Count <= Extent - Offset ) es false , el programa está mal formado.

Si Offset <= size ( ) && ( Count == std:: dynamic_extent || Count <= size ( ) - Offset ) es false , el comportamiento es indefinido.

(hasta C++26)

Si Offset <= size ( ) && ( Count == std:: dynamic_extent || Count <= size ( ) - Offset ) es false :

  • Si la implementación está reforzada , ocurre una violación de contrato . Además, si el manejador de violación de contrato retorna bajo semántica de evaluación "observar", el comportamiento es indefinido.
  • Si la implementación no está reforzada, el comportamiento es indefinido.
(desde C++26)


2) El conteo de elementos y el desplazamiento se proporcionan como argumentos de función, y la subvista siempre tiene una extensión dinámica.
  • Si count es std:: dynamic_extent , la subvista contiene todos los elementos comenzando desde el offset º .
  • De lo contrario, la subvista contiene count elementos comenzando desde el offset º .

Si offset <= size ( ) && ( count == std:: dynamic_extent || count <= size ( ) - offset ) es false , el comportamiento es indefinido.

(hasta C++26)

Si offset <= size ( ) && ( count == std:: dynamic_extent || count <= size ( ) - offset ) es false :

  • Si la implementación está reforzada , ocurre una violación de contrato . Además, si el manejador de violación de contrato retorna bajo semántica de evaluación "observar", el comportamiento es indefinido.
  • Si la implementación no está reforzada, el comportamiento es indefinido.
(desde C++26)

Valor de retorno

1) std:: span < element_type, FinalExtent >
( data ( ) + Offset, Count ! = std:: dynamic_extent ? Count : size ( ) - Offset ) )
2) std:: span < element_type, std:: dynamic_extent >
( datos ( ) + desplazamiento, recuento ! = std:: dynamic_extent ? recuento : tamaño ( ) - desplazamiento ) )

Ejemplo

#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::puts("");
    }
}
int main()
{
    char abc[26];
    std::ranges::iota(abc, 'A');
    display(abc);
}

Salida:

ABCDEFGHIJKLMNOPQRST
BCDEFGHIJKLMNOPQRSTU
CDEFGHIJKLMNOPQRSTUV
DEFGHIJKLMNOPQRSTUVW
EFGHIJKLMNOPQRSTUVWX
FGHIJKLMNOPQRSTUVWXY
GHIJKLMNOPQRSTUVWXYZ

Véase también

obtiene un subspan que consiste en los primeros N elementos de la secuencia
(función miembro pública)
obtiene un subspan que consiste en los últimos N elementos de la secuencia
(función miembro pública)