Namespaces
Variants

std::ranges::views::join_with, std::ranges::join_with_view

Depuis fr.cppreference.net
 
 
Bibliothèque de plages
Adaptateurs de plage
 
 
Défini dans l'en-tête <ranges>
template< ranges::input_range V, ranges::forward_range Pattern >
  requires ranges::view<V> &&
           ranges::input_range<ranges::range_reference_t<V>> &&
           ranges::view<Pattern> &&
           /*concatable*/<ranges::range_reference_t<V>, Pattern>
class join_with_view : 
    ranges::view_interface<join_with_view<V, Pattern>>
(1) (depuis C++23)
namespace views {
    inline constexpr /* unspecified */ join_with = /* unspecified */;
}
(2) (depuis C++23)
Signature d'appel
template< ranges::viewable_range R, class Pattern >
    requires /* see below */
constexpr ranges::view auto join_with( R&& r, Pattern&& pattern );
(depuis C++23)
template< class Pattern >
constexpr /* range adaptor closure */ join_with( Pattern&& pattern );
(depuis C++23)
1) Un adaptateur de plage qui représente une vue constituée de la séquence obtenue en aplatissant une vue de plages, avec chaque élément du délimiteur inséré entre les éléments de la vue. Le délimiteur peut être un seul élément ou une vue d'éléments.
Pour la définition de /*concatable*/, voir std::ranges::concat_view.
2) RangeAdaptorObject. L'expression views::join_with(e, f) est équivalente à une expression à join_with_view(e, f) pour toutes sous-expressions appropriées e et f.

join_with_view modélise input_range.

join_with_view modélise forward_range lorsque :

  • ranges::range_reference_t<V> est une référence, et
  • V et ranges::range_reference_t<V> modélisent chacun forward_range.

join_with_view modélise bidirectional_range lorsque :

  • ranges::range_reference_t<V> est une référence,
  • V, ranges::range_reference_t<V>, et Pattern modélisent chacun bidirectional_range, et
  • ranges::range_reference_t<V> et Pattern modélisent chacun common_range.

join_with_view modélise common_range lorsque :

  • ranges::range_reference_t<V> est une référence, et
  • V et ranges::range_reference_t<V> modélisent chacun forward_range et common_range.

Types imbriqués

Type Définition
InnerRng ranges:: range_reference_t < V >
( type membre d'exposition uniquement* )

Membres de données

Membre Description
V base_ la vue sous-jacente (adaptée)
(objet membre à titre d'exposition*)
Pattern pattern_ l'objet motif
(objet membre à titre d'exposition*)
non-propagating-cache <ranges::iterator_t<V>> outer_it_
(présent uniquement si V ne modélise pas forward_range)
le cache de l'itérateur externe
(objet membre à titre d'exposition*)
non-propagating-cache <std::remove_cv_t<InnerRng >> inner_
(présent uniquement si std::is_reference_v<InnerRng > est false)
le cache de la plage interne
(objet membre à titre d'exposition*)

Fonctions membres

construit un join_with_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
`empty` : retourne si la vue dérivée est vide, fournie uniquement si elle satisfait `sized_range` ou `forward_range`
(fonction membre publique de std::ranges::view_interface<D>)
`cbegin` (C++23)
: retourne un itérateur constant vers le début de la plage
(fonction membre publique de std::ranges::view_interface<D>)
`cend` (C++23)
: retourne un sentinelle pour l'itérateur constant de la plage
(fonction membre publique de std::ranges::view_interface<D>)
`operator bool` : retourne si la vue dérivée n'est pas vide, fournie uniquement si `ranges::empty` lui est applicable
(fonction membre publique de std::ranges::view_interface<D>)
`front` : 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>)
`back` : 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>)

Guides de déduction

Classes imbriquées

le type d'itérateur
( classe membre de modèle d'exposition uniquement* )
le type de sentinelle
( classe membre de modèle d'exposition uniquement* )

Notes

Macro de test de fonctionnalité Valeur Norme Fonctionnalité
__cpp_lib_ranges_join_with 202202L (C++23) std::ranges::join_with_view

Exemple

#include <iostream>
#include <ranges>
#include <string_view>
#include <vector>
int main()
{
    using namespace std::literals;
    std::vector v{"This"sv, "is"sv, "a"sv, "test."sv};
    auto joined = v | std::views::join_with(' ');
    for (auto c : joined)
        std::cout << c;
    std::cout << '\n';
}

Sortie :

This is a test.

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 Appliqué à Comportement publié Comportement corrigé
LWG 4074 C++23 join_with_view était sous-contraint contraintes mises à jour

Voir aussi

une view constituée de la séquence obtenue en aplatissant une view de range s
(modèle de classe) (objet adaptateur de gamme)
une view constituée de la concaténation des vues adaptées
(modèle de classe) (objet point de personnalisation)