Namespaces
Variants

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

Von de.cppreference.net
 
 
Bereichsbibliothek
Bereichsadapter
 
 
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>
    requires /*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 )
    requires (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 bzw. different-from.

 Überladung  Datenmember
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:
  • [i, s) ist kein gültiger Bereich.
  • n == to-unsigned-like (ranges::distance(i, s)) ist false.

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