Namensräume
Varianten
Aktionen

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

Von cppreference.com
< cpp‎ | ranges
 
 
Bereichsbibliothek
Range-Adaptoren
 
 
Definiert in der Header-Datei <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) (seit C++20)
namespace views {

    inline constexpr /* nicht spezifiziert */ join = /* nicht spezifiziert */;

}
(2) (seit C++20)
Aufruf-Signatur
template< ranges::viewable_range R >

    requires /* siehe unten */

constexpr ranges::view auto join( R&& r );
(seit C++20)
1) Ein Bereichsadapter, der eine view darstellt, die aus der Sequenz besteht, die durch das Abflachen einer View von Bereichen erhalten wird.
2) RangeAdaptorObject (und auch RangeAdaptorClosureObject). Der Ausdruck views::join(e) ist ausdrucksäquivalent zu join_view<views::all_t<decltype((e))>>{e} für alle geeigneten Unterausdrücke e.

join_view modelliert input_range.

join_view modelliert forward_range, wenn

join_view modelliert bidirectional_range, wenn

join_view modelliert common_range, wenn

Inhalt

[bearbeiten] Memberfunktionen

konstruiert eine join_view
(öffentliche Member-Funktion) [edit]
gibt eine Kopie der zugrunde liegenden (angepassten) View zurück
(public member function) [edit]
gibt einen Iterator zum Anfang zurück
(öffentliche Member-Funktion) [edit]
gibt einen Iterator oder Sentinel zum Ende zurück
(öffentliche Member-Funktion) [edit]
Geerbt von std::ranges::view_interface
gibt zurück, ob die abgeleitete Ansicht leer ist, bereitgestellt nur, wenn sie sized_range oder forward_range erfüllt
(public member function of std::ranges::view_interface<D>) [edit]
(C++23)
gibt einen konstanten Iterator zum Anfang des Bereichs zurück
(public member function of std::ranges::view_interface<D>) [edit]
(C++23)
gibt ein Sentinel für den konstanten Iterator des Bereichs zurück
(public member function of std::ranges::view_interface<D>) [edit]
gibt zurück, ob die abgeleitete Ansicht nicht leer ist, bereitgestellt nur, wenn ranges::empty darauf anwendbar ist
(public member function of std::ranges::view_interface<D>) [edit]
gibt das erste Element in der abgeleiteten View zurück, bereitgestellt, wenn sie forward_range erfüllt
(öffentliche Member-Funktion von std::ranges::view_interface<D>) [edit]
gibt das letzte Element in der abgeleiteten View zurück, nur bereitgestellt, wenn sie bidirectional_range und common_range erfüllt
(öffentliche Member-Funktion von std::ranges::view_interface<D>) [edit]

[bearbeiten] Deduktionshilfen

[bearbeiten] Verschachtelte Klassen

der Iterator-Typ
((nur zur Veranschaulichung Exposition-only Member-Klassenschablone)*)
der Sentinel-Typ
((nur zur Veranschaulichung Exposition-only Member-Klassenschablone)*)

[bearbeiten] Anmerkungen

Vor der Übernahme von P2328R1 konnte der innere Bereichstyp (ranges::range_reference_t<V>) kein Containertyp sein (aber eine Referenz auf einen Container). Zum Beispiel war es nicht erlaubt, eine transform_view von std::string prvalues zu verknüpfen.

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; // error before P2328R1
    return v | std::views::transform([](auto& p) -> std::string& { return p.name; })
             | std::views::join; // OK
}

[bearbeiten] Beispiel

#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';
}

Ausgabe

https://cppreference.de
1 2 3 4 5 6 7 8 9

[bearbeiten] Fehlerberichte

Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR angewendet auf Verhalten wie veröffentlicht Korrigiertes Verhalten
LWG 3474 C++20 views::join(e) gab eine Kopie von e zurück, wenn e eine join_view war. gibt eine verschachtelte join_view zurück
P2328R1 C++20 Nicht-View range prvalues konnten nicht von join_view verknüpft werden. wurde verknüpfbar gemacht

[bearbeiten] Siehe auch

ein view, der aus der Sequenz besteht, die durch Abflachung eines Views von Ranges gebildet wird, mit dem Trennzeichen zwischen den Elementen
(Klassen-Template) (Range-Adaptor-Objekt)[edit]
ein view, der aus der Verkettung der adaptierten Views besteht
(Klassen-Template) (Customization Point Objekt)[edit]