Namespaces
Variants

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

Depuis fr.cppreference.net
 
 
Bibliothèque de plages (ranges)
Adaptateurs de plages
 
 
subrange() requires std::default_initializable<I> = default;
(1) (depuis C++20)
constexpr subrange( /*convertible-to-non-slicing*/<I> auto i, S s )
    requires (!/*StoreSize*/);
(2) (depuis 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) (depuis 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) (depuis 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) (depuis C++20)

Construit un subrange.

Pour les définitions de /*make-unsigned-like-t*/ et /*different-from*/, voir respectivement make-unsigned-like-t et different-from.

 Surcharge  Membres de données
begin_ end_ size_
(uniquement si StoreSize est true)
(1) initialisé par valeur initialisé par valeur initialisé avec 0
(2) initialisé avec std::move(i) initialisé avec s S/O
(3) initialisé avec n
(4) initialisé avec std::move(ranges::begin(r)) initialisé avec ranges::end(r) initialisé avec static_cast<decltype(size_ )>
    (ranges::size(r))
(5) initialisé avec n
2) Si [i, s) n'est pas une plage valide, le comportement est indéfini.
3) Si l'une des conditions suivantes est satisfaite, le comportement est indéfini :
  • [i, s) n'est pas une plage valide.
  • n == to-unsigned-like (ranges::distance(i, s)) est false.

Paramètres

i - itérateur qui désigne le début de la plage
s - sentinelle qui désigne la fin de la plage
r - plage
n - indication de taille, doit être égale à la taille de la plage

Exemple

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR S'applique à Comportement publié Comportement corrigé
P2393R1 C++20 pour la surcharge ( 4 ) , size_ pourrait être initialisé avec ranges:: size ( r ) , mais il n'est
pas toujours implicitement convertible vers le type unsigned-integer-like correspondant
rendu la
conversion explicite