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> and
ranges::input_range<ranges::range_reference_t<V>>
class join_view
: public ranges::view_interface<join_view<V>>
|
(1) | (depuis C++20) |
namespace views {
inline constexpr /* unspecified */ join = /* unspecified */;
}
|
(2) | (depuis C++20) |
| Signature d'appel |
||
template< ranges::viewable_range R >
requires /* see below */
constexpr ranges::view auto join( R&& r );
|
(depuis C++20) | |
views::join(e) est équivalente à une expression à join_view<views::all_t<decltype((e))>>{e} pour toutes sous-expressions appropriées e.join_view modélise input_range.
join_view modélise forward_range lorsque :
ranges::range_reference_t<V>est un type de référence, etVetranges::range_reference_t<V>modélisent chacun forward_range.
join_view modélise bidirectional_range lorsque :
ranges::range_reference_t<V>est un type de référence,Vmodélise bidirectional_range, etranges::range_reference_t<V>modélise à la fois bidirectional_range et common_range.
join_view modélise common_range lorsque :
ranges::range_reference_t<V>est un type de référence, etVetranges::range_reference_t<V>modélisent chacun forward_range et common_range.
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 ranges::view_interface | |
| retourne 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) |
retourne un itérateur constant au 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 dans 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 dans 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://fr.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) |