Namespaces
Variants

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

From cppreference.net
Ranges library
Range adaptors
Definiert im Header <ranges>
template < ranges:: input_range V >

requires ranges:: view < V > und
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)
Aufrufsignatur
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 durch Flachlegen einer Ansicht von Bereichen erhaltenen Sequenz besteht.
2) RangeAdaptorObject (und auch RangeAdaptorClosureObject ). Der Ausdruck views :: join ( e ) ist ausdrucksäquivalent zu join_view < views:: all_t < decltype ( ( e ) ) >> { e } für beliebige geeignete Teilausdrü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:

Inhaltsverzeichnis

Memberfunktionen

konstruiert einen join_view
(öffentliche Elementfunktion)
gibt eine Kopie der zugrunde liegenden (angepassten) Ansicht zurück
(öffentliche Elementfunktion)
gibt einen Iterator zum Anfang zurück
(öffentliche Elementfunktion)
gibt einen Iterator oder einen Sentinel zum Ende zurück
(öffentliche Elementfunktion)
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
(öffentliche Elementfunktion von std::ranges::view_interface<D> )
(C++23)
gibt einen konstanten Iterator zum Anfang des Bereichs zurück
(öffentliche Elementfunktion von std::ranges::view_interface<D> )
(C++23)
gibt einen Sentinel für den konstanten Iterator des Bereichs zurück
(öffentliche Elementfunktion von std::ranges::view_interface<D> )
gibt zurück, ob die abgeleitete Ansicht nicht leer ist, bereitgestellt nur wenn ranges::empty darauf anwendbar ist
(öffentliche Elementfunktion von std::ranges::view_interface<D> )
gibt das erste Element in der abgeleiteten Ansicht zurück, bereitgestellt wenn sie forward_range erfüllt
(öffentliche Elementfunktion von std::ranges::view_interface<D> )
gibt das letzte Element in der abgeleiteten Ansicht zurück, bereitgestellt nur wenn sie bidirectional_range und common_range erfüllt
(öffentliche Elementfunktion von std::ranges::view_interface<D> )

Ableitungsleitfäden

Geschachtelte Klassen

der Iteratortyp
( Nur zur Darstellung verwendete Member-Klassentemplate* )
der Sentry-Typ
( Nur zur Darstellung verwendete Member-Klassentemplate* )

Hinweise

Vor der Annahme von P2328R1 konnte der innere Bereichstyp ( ranges:: range_reference_t < V > ) kein Containertyp sein (konnte jedoch eine Referenz auf einen Container sein). Beispielsweise war es nicht erlaubt, eine transform_view von std::string -Prvalue 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; // Fehler vor P2328R1
    return v | std::views::transform([](auto& p) -> std::string& { return p.name; })
             | std::views::join; // OK
}
**Änderungen:** - "error before P2328R1" → "Fehler vor P2328R1" - "OK" bleibt unverändert (ist ein international gebräuchlicher Begriff in der Programmierung) Alle HTML-Tags, Attribute, C++-Code und spezifische C++-Begriffe wurden beibehalten.

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.net
1 2 3 4 5 6 7 8 9

Fehlerberichte

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

DR Angewendet auf Verhalten wie veröffentlicht Korrektes Verhalten
LWG 3474 C++20 views :: join ( e ) gab eine Kopie von e zurück, wenn e ein join_view ist gibt einen verschachtelten join_view zurück
P2328R1 C++20 Nicht-View range Prvalues konnten nicht durch join_view gejoint werden joinfähig gemacht

Siehe auch

eine view bestehend aus der Sequenz, die durch Glätten einer Ansicht von Bereichen mit Trennzeichen zwischen Elementen erhalten wird
(Klassentemplate) (Range-Adapter-Objekt)
eine view bestehend aus der Verkettung der angepassten Ansichten
(Klassentemplate) (Anpassungspunkt-Objekt)