Namespaces
Variants

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

Depuis fr.cppreference.net
 
 
Bibliothèque des vues (ranges)
Adaptateurs de vues
 
 
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)
1) Un adaptateur de vue qui représente une vue constituée de la séquence obtenue en aplatissant une vue de vues (ranges).
2) RangeAdaptorObject (et aussi RangeAdaptorClosureObject). L'expression 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, et
  • V et ranges::range_reference_t<V> modélisent chacun forward_range.

join_view modélise bidirectional_range lorsque :

join_view modélise common_range lorsque :

  • ranges::range_reference_t<V> est un type de référence, et
  • V et ranges::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)