std::ranges:: owning_view
|
Défini dans l'en-tête
<ranges>
|
||
|
template
<
ranges::
range
R
>
requires
std::
movable
<
R
>
&&
(
!
/*is-initializer-list*/
<
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 .
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) |
|
|
(C++26)
|
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) |
r_
par son initialiseur de membre par défaut (
=
R
(
)
).
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
r_
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
>>
=
|
(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
|
(C++20)
|
une
view
des éléments d'une autre
range
(modèle de classe) |
|
(C++20)
|
une
view
qui inclut tous les éléments d'une
range
(modèle d'alias) (objet adaptateur de gamme) |