Namespaces
Variants

std::ranges:: views:: join, std::ranges:: join_view

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

requires ranges:: view < V > et
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 /* non spécifié */ join = /* non spécifié */ ;

}
(2) (depuis C++20)
Signature d'appel
template < ranges:: viewable_range R >

requires /* voir ci-dessous */

constexpr ranges:: view auto join ( R && r ) ;
(depuis C++20)
1) Un adaptateur de gamme qui représente view constitué de la séquence obtenue par l'aplatissement d'une vue de gammes.
2) RangeAdaptorObject (et aussi RangeAdaptorClosureObject ). L'expression views :: join ( e ) est équivalente en expression à join_view < views:: all_t < decltype ( ( e ) ) >> { e } pour toute sous-expression appropriée e .

join_view modélise input_range .

join_view modélise forward_range lorsque :

join_view modélise bidirectional_range lorsque :

join_view modélise common_range lorsque :

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)