Namensräume
Varianten
Aktionen

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

Von cppreference.com
< cpp‎ | container‎ | span
 
 
 
 
template< std::size_t Offset,

          std::size_t Count = std::dynamic_extent >
constexpr std::span<element_type, E /* 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 einen Span, der eine Sicht auf die Count Elemente dieses Spans ab dem Offset Offset ist. Wenn Count std::dynamic_extent ist, ist die Anzahl der Elemente im Subspan size() - offset (d.h. er endet am Ende von *this).

1) Ist ill-formed, wenn
  • Offset größer als Extent ist, oder
  • Count nicht std::dynamic_extent ist und Count größer als Extent - Offset ist.

Das Verhalten ist undefiniert, wenn entweder Offset oder Count außerhalb des gültigen Bereichs liegt. Dies geschieht, wenn

  • Offset größer als size() ist, oder
  • Count nicht std::dynamic_extent ist und Count größer als size() - Offset ist.

Die Extent E des von (1) zurückgegebenen Spans wird wie folgt bestimmt:

  • Wenn Count nicht std::dynamic_extent ist, Count;
  • Andernfalls, wenn Extent nicht std::dynamic_extent ist, Extent - Offset;
  • Andernfalls, std::dynamic_extent.

[bearbeiten] Rückgabewert

Der angeforderte Subspan r, so dass r.data() == this->data() + Offset. Wenn Count std::dynamic_extent ist, r.size() == this->size() - Offset; andernfalls r.size() == Count.

[bearbeiten] 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::putchar('\n');
    }
}
 
int main()
{
    char abc[26];
    std::iota(std::begin(abc), std::end(abc), 'A');
    display(abc);
}

Ausgabe

ABCDEFGHIJKLMNOPQRST
BCDEFGHIJKLMNOPQRSTU
CDEFGHIJKLMNOPQRSTUV
DEFGHIJKLMNOPQRSTUVW
EFGHIJKLMNOPQRSTUVWX
FGHIJKLMNOPQRSTUVWXY
GHIJKLMNOPQRSTUVWXYZ

[bearbeiten] Siehe auch

erstellt eine Unteransicht (subspan), die die ersten N Elemente der Sequenz enthält
(öffentliche Member-Funktion) [edit]
erstellt eine Unteransicht (subspan), die die letzten N Elemente der Sequenz enthält
(öffentliche Member-Funktion) [edit]