Namespaces
Variants

std::ranges::subrange<I,S,K>:: subrange

From cppreference.net
Ranges library
Range adaptors
(Anmerkung: Der bereitgestellte HTML-Code enthält keinen übersetzbaren Text, da alle Tags leer sind. Die Struktur wurde gemäß den Anforderungen unverändert beibehalten.)
subrange ( ) requires std:: default_initializable < I > = default ;
(1) (seit C++20)
constexpr subrange ( /*convertible-to-non-slicing*/ < I > auto i, S s )
requires ( ! /*StoreSize*/ ) ;
(2) (seit C++20)
constexpr subrange ( /*convertible-to-non-slicing*/ < I > auto i, S s,

/*make-unsigned-like-t*/ < std:: iter_difference_t < I >> n )

requires ( K == ranges :: subrange_kind :: sized ) ;
(3) (seit C++20)
template < /*different-from*/ < subrange > R >

requires ranges:: borrowed_range < R > &&
/*convertible-to-non-slicing*/ < ranges:: iterator_t < R > , I > &&
std:: convertible_to < ranges:: sentinel_t < R > , S >
constexpr subrange ( R && r )

requires ( ! /*StoreSize*/ || ranges:: sized_range < R > ) ;
(4) (seit C++20)
template < ranges:: borrowed_range R >

erfordert /*convertible-to-non-slicing*/ < ranges:: iterator_t < R > , I > &&
std:: convertible_to < ranges:: sentinel_t < R > , S >
constexpr subrange ( R && r,
/*make-unsigned-like-t*/ < std:: iter_difference_t < I >> n )
erfordert ( K == ranges :: subrange_kind :: sized )

: subrange { ranges:: begin ( r ) , ranges:: end ( r ) , n } { }
(5) (seit C++20)

Konstruiert einen subrange .

Für die Definitionen von /*make-unsigned-like-t*/ und /*different-from*/ , siehe make-unsigned-like-t und different-from beziehungsweise.

Überladung Datenmitglieder
begin_ end_ size_
(nur wenn StoreSize true ist)
(1) wertinitialisiert wertinitialisiert initialisiert mit 0
(2) initialisiert mit std :: move ( i ) initialisiert mit s N/A
(3) initialisiert mit n
(4) initialisiert mit std :: move ( ranges:: begin ( r ) ) initialisiert mit ranges:: end ( r ) initialisiert mit static_cast < decltype ( size_  ) >
( ranges:: size ( r ) )
(5) initialisiert mit n
2) Wenn [ i , s ) kein gültiger Bereich ist, ist das Verhalten undefiniert.
3) Wenn eine der folgenden Bedingungen erfüllt ist, ist das Verhalten undefiniert:

Parameter

i - Iterator, der den Anfang des Bereichs bezeichnet
s - Sentinel, der das Ende des Bereichs bezeichnet
r - Bereich
n - Größenhinweis, muss gleich der Größe des Bereichs sein

Beispiel

Fehlerberichte

Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR Angewendet auf Verhalten wie veröffentlicht Korrigiertes Verhalten
P2393R1 C++20 für Überladung ( 4 ) , size_ könnte mit ranges:: size ( r ) initialisiert werden, aber es ist
nicht immer implizit konvertierbar zum entsprechenden unsigned-integer-like Typ
die Konvertierung
explizit gemacht