std::ranges:: views:: join, std::ranges:: join_view
|
Défini dans l'en-tête
<ranges>
|
||
|
template
<
ranges::
input_range
V
>
requires
ranges::
view
<
V
>
et
|
(1) | (depuis C++20) |
|
namespace
views
{
inline
constexpr
/* non spécifié */
join
=
/* non spécifié */
;
|
(2) | (depuis C++20) |
|
Signature d'appel
|
||
|
template
<
ranges::
viewable_range
R
>
requires
/* voir ci-dessous */
|
(depuis C++20) | |
view
constitué de la séquence obtenue par l'aplatissement d'une vue de gammes.
join_view
modélise
input_range
.
join_view
modélise
forward_range
lorsque :
- ranges:: range_reference_t < V > est un type référence, et
-
V
et
ranges::
range_reference_t
<
V
>
modélisent chacun
forward_range.
join_view
modélise
bidirectional_range
lorsque :
- ranges:: range_reference_t < V > est un type référence,
-
V
modélise
bidirectional_range, et -
ranges::
range_reference_t
<
V
>
modélise à la fois
bidirectional_rangeetcommon_range.
join_view
modélise
common_range
lorsque :
- ranges:: range_reference_t < V > est un type référence, et
-
V
et
ranges::
range_reference_t
<
V
>
modélisent chacun
forward_rangeetcommon_range.
Table des matières |
Fonctions membres
construit un
join_view
(fonction membre publique) |
|
|
renvoie une copie de la vue sous-jacente (adaptée)
(fonction membre publique) |
|
|
renvoie un itérateur vers le début
(fonction membre publique) |
|
|
renvoie un itérateur ou un sentinelle vers la fin
(fonction membre publique) |
|
Hérité de std::ranges::view_interface |
|
indique si la vue dérivée est vide, fourni uniquement si elle satisfait
sized_range
ou
forward_range
(fonction membre publique de
std::ranges::view_interface<D>
)
|
|
|
(C++23)
|
renvoie un itérateur constant vers le début de la plage
(fonction membre publique de
std::ranges::view_interface<D>
)
|
|
(C++23)
|
renvoie un sentinelle pour l'itérateur constant de la plage
(fonction membre publique de
std::ranges::view_interface<D>
)
|
|
indique 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>
)
|
|
renvoie 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>
)
|
|
renvoie 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>
)
|
|
Guides de déduction
Classes imbriquées
|
le type d'itérateur
( classe membre de présentation uniquement* ) |
|
|
le type de sentinelle
( classe membre de présentation uniquement* ) |
Notes
Avant que
P2328R1
ne soit adopté, le type de plage interne (
ranges::
range_reference_t
<
V
>
) ne pouvait pas être un type conteneur (mais pouvait être une référence à un conteneur). Par exemple, il n'était pas permis de joindre un
transform_view
de prvalue
std::string
.
struct Person { int age; std::string name; }; auto f(std::vector<Person>& v) { // return v | std::views::transform([](auto& p){ return p.name; }) // | std::views::join; // erreur avant P2328R1 return v | std::views::transform([](auto& p) -> std::string& { return p.name; }) | std::views::join; // OK }
Exemple
#include <iostream> #include <ranges> #include <string_view> #include <vector> int main() { using namespace std::literals; const auto bits = {"https:"sv, "//"sv, "cppreference"sv, "."sv, "com"sv}; for (char const c : bits | std::views::join) std::cout << c; std::cout << '\n'; const std::vector<std::vector<int>> v{{1, 2}, {3, 4, 5}, {6}, {7, 8, 9}}; auto jv = std::ranges::join_view(v); for (int const e : jv) std::cout << e << ' '; std::cout << '\n'; }
Sortie :
https://cppreference.net 1 2 3 4 5 6 7 8 9
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 | Applicable à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| LWG 3474 | C++20 |
views
::
join
(
e
)
renvoyait une copie de
e
lorsque
e
est un
join_view
|
renvoie un
join_view
imbriqué
|
| P2328R1 | C++20 |
les prvalues de
range
non-vues ne pouvaient pas être jointes par
join_view
|
rendues joignables |
Voir aussi
une
view
constituée de la séquence obtenue par l'aplatissement d'une vue de plages, avec le délimiteur entre les éléments
(modèle de classe) (objet adaptateur de plage) |
|
une
view
constituée de la concaténation des vues adaptées
(modèle de classe) (objet point de personnalisation) |