std::ranges::views::join, std::ranges::join_view
| Definiert in der Header-Datei <ranges> |
||
| template< ranges::input_range V > requires ranges::view<V> and |
(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 */ |
(seit C++20) | |
view darstellt, die aus der Sequenz besteht, die durch das Abflachen einer View von Bereichen erhalten wird.join_view modelliert input_range.
join_view modelliert forward_range, wenn
- ranges::range_reference_t<V> ein Referenztyp ist, und
- V und ranges::range_reference_t<V> jeweils
forward_rangemodellieren.
join_view modelliert bidirectional_range, wenn
- ranges::range_reference_t<V> ein Referenztyp ist,
- V
bidirectional_rangemodelliert und - ranges::range_reference_t<V> sowohl
bidirectional_rangeals auchcommon_rangemodelliert.
join_view modelliert common_range, wenn
- ranges::range_reference_t<V> ein Referenztyp ist, und
- V und ranges::range_reference_t<V> jeweils
forward_rangeundcommon_rangemodellieren.
Inhalt |
[bearbeiten] Memberfunktionen
konstruiert eine join_view(öffentliche Member-Funktion) | |
| gibt eine Kopie der zugrunde liegenden (angepassten) View zurück (public member function) | |
| gibt einen Iterator zum Anfang zurück (öffentliche Member-Funktion) | |
| gibt einen Iterator oder Sentinel zum Ende zurück (öffentliche Member-Funktion) | |
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>) | |
| (C++23) |
gibt einen konstanten Iterator zum Anfang des Bereichs zurück (public member function of std::ranges::view_interface<D>) |
| (C++23) |
gibt ein Sentinel für den konstanten Iterator des Bereichs zurück (public member function of std::ranges::view_interface<D>) |
| 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>) | |
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>) | |
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>) | |
[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) | |
ein view, der aus der Verkettung der adaptierten Views besteht(Klassen-Template) (Customization Point Objekt) |