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, /* siehe unten */ >

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

subspan ( size_type offset,

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

Erhält eine Teilansicht über einige aufeinanderfolgende Elemente dieser Spanne, die einzubeziehenden Elemente werden durch eine Elementanzahl und einen Versatz bestimmt.

1) Die Elementanzahl und der Offset werden als Template-Argumente bereitgestellt, und die Subview hat nur dann einen dynamischen Umfang, wenn sowohl Count als auch Offset gleich std:: dynamic_extent sind.
  • Wenn Count gleich std:: dynamic_extent ist, enthält die Subview alle Elemente ab dem Offset ten .
  • Andernfalls enthält die Subview Count Elemente ab dem Offset ten .
Bezeichnen Sie das zweite Template-Argument des Rückgabetyps als FinalExtent , es ist definiert als Count ! = std:: dynamic_extent
? Count
: ( Extent ! = std:: dynamic_extent
? Extent - Offset
: std:: dynamic_extent )
.
Wenn Offset <= Extent && ( Count == std:: dynamic_extent || Count <= Extent - Offset ) false ist, ist das Programm fehlerhaft.

Wenn Offset <= size ( ) && ( Count == std:: dynamic_extent || Count <= size ( ) - Offset ) false ist, ist das Verhalten undefiniert.

(bis C++26)

Wenn Offset <= size ( ) && ( Count == std:: dynamic_extent || Count <= size ( ) - Offset ) false ist:

  • Wenn die Implementierung gehärtet ist, tritt eine Vertragsverletzung auf. Wenn der Vertragsverletzungs-Handler unter "observe"-Auswertungssemantik zurückkehrt, ist das Verhalten undefiniert.
  • Wenn die Implementierung nicht gehärtet ist, ist das Verhalten undefiniert.
(seit C++26)


2) Die Elementanzahl und der Offset werden als Funktionsargumente bereitgestellt, und die Teilansicht hat immer eine dynamische Ausdehnung.
  • Wenn count gleich std:: dynamic_extent ist, enthält die Teilansicht alle Elemente ab dem offset ten .
  • Andernfalls enthält die Teilansicht count Elemente ab dem offset ten .

Wenn offset <= size ( ) && ( count == std:: dynamic_extent || count <= size ( ) - offset ) false ist, ist das Verhalten undefiniert.

(bis C++26)

Wenn offset <= size ( ) && ( count == std:: dynamic_extent || count <= size ( ) - offset ) false ist:

  • Wenn die Implementierung gehärtet ist, tritt eine Vertragsverletzung auf. Wenn der Vertragsverletzungs-Handler unter "observe"-Auswertungssemantik zurückkehrt, ist das Verhalten undefiniert.
  • Wenn die Implementierung nicht gehärtet ist, ist das Verhalten undefiniert.
(seit C++26)

Rückgabewert

1) std:: span < element_type, FinalExtent >
( data ( ) + Offset, Count ! = std:: dynamic_extent ? Count : size ( ) - Offset ) )
2) std:: span < element_type, std:: dynamic_extent >
( data ( ) + offset, count ! = std:: dynamic_extent ? count : size ( ) - offset ) )

Beispiel

#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);
}

Ausgabe:

ABCDEFGHIJKLMNOPQRST
BCDEFGHIJKLMNOPQRSTU
CDEFGHIJKLMNOPQRSTUV
DEFGHIJKLMNOPQRSTUVW
EFGHIJKLMNOPQRSTUVWX
FGHIJKLMNOPQRSTUVWXY
GHIJKLMNOPQRSTUVWXYZ

Siehe auch

erhält einen Subspan, der aus den ersten N Elementen der Sequenz besteht
(öffentliche Elementfunktion)
erhält einen Subspan, der aus den letzten N Elementen der Sequenz besteht
(öffentliche Elementfunktion)