Namespaces
Variants

std::ranges:: owning_view

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

requires std:: movable < R > && ( ! /*is-initializer-list*/ < R > )
class owning_view

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

owning_view est une view qui possède la propriété exclusive d'un range . Elle est uniquement déplaçable et stocke ce range en son sein.

La constante /*is-initializer-list*/ < R > dans la clause requires est true si et seulement si std:: remove_cvref_t < R > est une spécialisation de std::initializer_list .

Table des matières

Membres de données

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

Fonctions membres

construit un owning_view en initialisant par valeur ou en déplaçant la plage stockée
(fonction membre publique)
affecte par déplacement la plage stockée
(fonction membre publique)
retourne une référence à la plage stockée
(fonction membre publique)
retourne l'itérateur de début de la plage stockée
(fonction membre publique)
retourne le sentinelle de la plage stockée
(fonction membre publique)
vérifie si la plage stockée est vide
(fonction membre publique)
retourne la taille de la sized_range stockée
(fonction membre publique)
retourne la taille approximative de la approximately_sized_range stockée
(fonction membre publique)
retourne le pointeur vers le début de la contiguous_range stocké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::owning_view:: owning_view

owning_view ( ) requires std:: default_initializable < R > = default ;
(1) (since C++20)
owning_view ( owning_view && other ) = default ;
(2) (since C++20)
constexpr owning_view ( R && t ) ;
(3) (since C++20)
1) Constructeur par défaut. Initialise par valeur r_ par son initialiseur de membre par défaut ( = R ( ) ).
2) Constructeur de déplacement. Construit par déplacement r_ à partir de celui de other .
3) Construit par déplacement r_ à partir de t .

Paramètres

other - un autre owning_view à partir duquel déplacer
t - plage à partir de laquelle déplacer

Notes

owning_view ne définit pas explicitement de constructeur de copie. owning_view est uniquement déplaçable.

std::ranges::owning_view:: operator=

owning_view & operator = ( owning_view && other ) = default ;
(depuis C++20)

Opérateur d'affectation par déplacement. Affecte par déplacement r_ depuis celui de other .

Paramètres

other - un autre owning_view à déplacer

Valeur de retour

* this

Notes

owning_view ne définit pas explicitement d'opérateur d'affectation par copie. owning_view est uniquement déplaçable.

std::ranges::owning_view:: base

constexpr R & base ( ) & noexcept ;
(1) (depuis C++20)
constexpr const R & base ( ) const & noexcept ;
(2) (depuis C++20)
constexpr R && base ( ) && noexcept ;
(3) (depuis C++20)
constexpr const R && base ( ) const && noexcept ;
(4) (depuis C++20)

Retourne une référence à la plage stockée, en conservant la catégorie de valeur et la qualification const.

Valeur de retour

1,2) r_
3,4) std :: move ( r_  )

std::ranges::owning_view:: begin

constexpr ranges:: iterator_t < R > begin ( ) ;
(1) (depuis C++20)
constexpr auto begin ( ) const requires ranges:: range < const R > ;
(2) (depuis C++20)

Retourne ranges:: begin ( r_  ) .

std::ranges::owning_view:: end

constexpr ranges:: sentinel_t < R > end ( ) ;
(1) (since C++20)
constexpr auto end ( ) const requires ranges:: range < const R > ;
(2) (since C++20)

Retourne ranges:: end ( r_  ) .

std::ranges::owning_view:: empty

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

Retourne ranges:: empty ( r_  ) .

std::ranges::owning_view:: size

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

Retourne ranges:: size ( r_  ) .

std::ranges::owning_view:: reserve_hint

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

Retourne ranges :: reserve_hint ( r_  ) .

std::ranges::owning_view:: data

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

Retourne ranges:: data ( r_  ) .

Modèles d'assistance

template < class T >

constexpr bool enable_borrowed_range < std :: ranges :: owning_view < T >> =

ranges:: enable_borrowed_range < T > ;
(depuis C++20)

Cette spécialisation de ranges:: enable_borrowed_range permet à owning_view de satisfaire borrowed_range lorsque la plage sous-jacente la satisfait.

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 <cassert>
#include <iostream>
#include <ranges>
#include <string>
int main()
{
    using namespace std::literals;
    std::ranges::owning_view ov{"cosmos"s}; // le type déduit de R est std::string ;
                                            // « ov » est le seul propriétaire de cette chaîne
    assert(
        ov.empty() == false &&
        ov.size() == 6 &&
        ov.size() == ov.base().size() &&
        ov.front() == 'c' &&
        ov.front() == *ov.begin() &&
        ov.back() == 's' &&
        ov.back() == *(ov.end() - 1) &&
        ov.data() == ov.base()
    );
    std::cout << "sizeof(ov): " << sizeof ov << '\n' // généralement égal à sizeof(R)
              << "boucle for à portée : ";
    for (const char ch : ov)
        std::cout << ch;
    std::cout << '\n';
    std::ranges::owning_view<std::string> ov2;
    assert(ov2.empty());
//  ov2 = ov; // erreur de compilation : l'opérateur d'affectation par copie est supprimé
    ov2 = std::move(ov); // OK
    assert(ov2.size() == 6);
}

Sortie possible :

sizeof(ov): 32
boucle for à portée : cosmos

Voir aussi

une view des éléments d'une autre range
(modèle de classe)
une view qui inclut tous les éléments d'une range
(modèle d'alias) (objet adaptateur de gamme)