Namespaces
Variants

std::ranges:: ref_view

From cppreference.net
Ranges library
Range adaptors
Défini dans l'en-tête <ranges>
template < ranges:: range R >

requires std:: is_object_v < R >
class ref_view

: public ranges:: view_interface < ref_view < R >>
(depuis C++20)

ref_view est une view des éléments d'un autre range . Elle encapsule une référence vers ce range .

Table des matières

Membres de données

Membre Description
R* r_ un pointeur vers la plage sous-jacente
( objet membre d'exposition uniquement* )

Fonctions membres

construit un ref_view qui référence la plage donnée
(fonction membre publique)
retourne la référence à la plage référencée
(fonction membre publique)
retourne l'itérateur de début de la plage référencée
(fonction membre publique)
retourne le sentinelle de la plage référencée
(fonction membre publique)
vérifie si la plage référencée est vide
(fonction membre publique)
retourne la taille de la sized_range référencée
(fonction membre publique)
retourne la taille approximative de la approximately_sized_range référencée
(fonction membre publique)
retourne le pointeur vers le début de la contiguous_range référencée
(fonction membre publique)
Hérité de std::ranges::view_interface
(C++23)
retourne un itérateur constant vers le début de la plage
(fonction membre publique de std::ranges::view_interface<D> )
(C++23)
retourne un sentinelle pour l'itérateur constant de la plage
(fonction membre publique de std::ranges::view_interface<D> )
retourne si la vue dérivée n'est pas vide, fourni uniquement si ranges::empty lui est applicable
(fonction membre publique de std::ranges::view_interface<D> )
retourne le premier élément de la vue dérivée, fourni si elle satisfait forward_range
(fonction membre publique de std::ranges::view_interface<D> )
retourne le dernier élément de la vue dérivée, fourni uniquement si elle satisfait bidirectional_range et common_range
(fonction membre publique de std::ranges::view_interface<D> )
retourne le n ème élément de la vue dérivée, fourni uniquement si elle satisfait random_access_range
(fonction membre publique de std::ranges::view_interface<D> )

std::ranges::ref_view:: ref_view

template < /*different-from*/ < ref_view > T >

requires std:: convertible_to < T, R & > &&
requires { _FUN ( std:: declval < T > ( ) ) ; }

constexpr ref_view ( T && t ) ;
(depuis C++20)

Initialise r_ avec std:: addressof ( static_cast < R & > ( std:: forward < T > ( t ) ) ) .

/*different-from*/ < T, U > est satisfait si et seulement si std:: remove_cvref_t < T > et std:: remove_cvref_t < U > ne sont pas le même type, et les surcharges de _FUN sont déclarées comme void _FUN ( R & ) ; void _FUN ( R && ) = delete ; .

Paramètres

t - plage à référencer

std::ranges::ref_view:: base

constexpr R & base ( ) const ;
(depuis C++20)

Retourne * r_ .

std::ranges::ref_view:: begin

constexpr ranges:: iterator_t < R > begin ( ) const ;
(depuis C++20)

Retourne ranges:: begin ( * r_  ) .

std::ranges::ref_view:: end

constexpr ranges:: sentinel_t < R > end ( ) const ;
(depuis C++20)

Retourne ranges:: end ( * r_  ) .

std::ranges::ref_view:: empty

constexpr bool empty ( ) const
requires requires { ranges:: empty ( * r_ ) ; } ;
(depuis C++20)

Retourne ranges:: empty ( * r_  ) .

std::ranges::ref_view:: size

constexpr auto size ( ) const
requires ranges:: sized_range < R > ;
(depuis C++20)

Retourne ranges:: size ( * r_  ) .

std::ranges::ref_view:: reserve_hint

constexpr auto size ( ) const
requires ranges :: approximately_sized_range < R > ;
(depuis C++26)

Retourne ranges :: reserve_hint ( * r_  ) .

std::ranges::ref_view:: data

constexpr auto data ( ) const
requires ranges:: contiguous_range < R > ;
(depuis C++20)

Retourne ranges:: data ( * r_  ) .

Guides de déduction

template < class R >
ref_view ( R & ) - > ref_view < R > ;
(depuis C++20)

Modèles d'assistance

template < class T >
constexpr bool enable_borrowed_range < ranges :: ref_view < T >> = true ;
(depuis C++20)

Cette spécialisation de std::ranges::enable_borrowed_range permet à ref_view de satisfaire borrowed_range .

Notes

Macro de test de fonctionnalité Valeur Std Fonctionnalité
__cpp_lib_ranges_reserve_hint 202502L (C++26) ranges::approximately_sized_range et reserve_hint

Exemple

#include <iostream>
#include <ranges>
int main()
{
    const std::string s{"cosmos"};
    const std::ranges::take_view tv{s, 3};
    const std::ranges::ref_view rv{tv};
    std::cout
        << std::boolalpha
        << "call empty(): " << rv.empty() << '\n'
        << "call size() : " << rv.size() << '\n'
        << "call begin(): " << *rv.begin() << '\n'
        << "call end()  : " << *(rv.end() - 1) << '\n'
        << "call data() : " << rv.data() << '\n'
        << "call base() : " << rv.base().size() << '\n' // ~> tv.size()
        << "range-for   : ";
    for (const auto c : rv)
        std::cout << c;
    std::cout << '\n';
}

Sortie :

call empty(): false
call size() : 3
call begin(): c
call end()  : s
call data() : cosmos
call base() : 3
range-for   : cos

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é
P2325R3 C++20 le constructeur par défaut était fourni car
view doit être default_initializable
supprimé ainsi que l'exigence

Voir aussi

CopyConstructible et CopyAssignable wrapper de référence
(modèle de classe)
une view avec possession exclusive d'une range
(modèle de classe)
une view qui inclut tous les éléments d'une range
(modèle d'alias) (objet adaptateur de gamme)